database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 6852 게시물 읽기
No. 6852
랭킹정보 업데이트 하기
작성자
고영훈(kyh9052)
작성일
2014-09-26 10:43ⓒ
2014-09-26 13:16ⓜ
조회수
6,688

아래와 같은 UserData 라는 테이블이 있습니다

User Type Value Rank
1        101  1         
2        101  2        
2        102  1         
3        101  3        
4        101  4         

현재 Rank 값이 저장이 안되어있는데

SELECT User, Type, Value, RANK() OVER (Partition By Type Order By Value desc) From UserData

위와 같은 쿼리문으로 Rank 값을 Type 별로 산정하여 랭킹을 매겨 

User Type Value Rank
1        101  1         1
2        101  2         2
2        102  1         1
3        101  3         3
4        101  4         4

위와 같은 Rank를 저장하고 싶은데

Update문을 어떻게 써야할지 모르겠습니다

그리고 Rank 를 저장하는 Table을 분리하는게 성능에 나을지 좋은 방법 있으면 부탁드립니다

고수님들의 도움 부탁드립니다

 

 

 

 

 

이 글에 대한 댓글이 총 1건 있습니다.

 CREATE TABLE #UserData (

[User] INT ,
[Type] INT ,
[Value] INT ,
[Rank] INT
)
;
 
INSERT INTO #UserData( [User], [Type], [Value] )
VALUES( 1, 101, 1 ) ,
(2, 101, 2),  
(2, 102, 1),  
(3, 101, 3),  
(4, 101, 4)
;
 
SELECT [User], [Type], [Value], RANK() OVER (Partition By [Type] Order By [Value] desc) 
From #UserData
;
 
UPDATE #UserData
SET [Rank] = bb.rnk
FROM (
SELECT [User], [Type], RANK() OVER (Partition By [Type] Order By [Value] desc) AS rnk
FROM #UserData
) AS bb 
WHERE #UserData.[User] = bb.[User] AND #UserData.[User] = bb.[User]
;
 
SELECT *
FROM #UserData
;
 
 
테이블을 위와 같이 갱신하면 rank라는 컬럼을 포함하는 테이블에 update동안 table lock 이 걸리게 될텐데 이때 서비스에 영향을 많이 끼친다고 판단되시면 역정규화하여 분리를, 그렇지 않다면 그냥 두어도 될 것으로 보입니다.
우욱님이 2014-09-26 16:49에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
6856쿼리나 프로시저 작성 부탁합니다. [3]
정인수
2014-10-15
6130
6855mssql 에서 select 시 레코드 결과 수 지정 [2]
송영미
2014-10-14
5840
6853두개의 테이블을 조회후 조건쿼리 [3]
김우성
2014-09-29
6178
6852랭킹정보 업데이트 하기 [1]
고영훈
2014-09-26
6688
6851두개의테이블을 한번에 업데이트 하기 [3]
김우성
2014-09-21
6352
6848조건이 1인것과 0인것 구별해서 합계내기 [1]
김우성
2014-09-06
6103
6847select -> update 문으로 바꾸기 [3]
김우성
2014-09-03
6543
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.047초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다