ROW_NUMBER()
- 결과 집합 파티션 내의 행 일련 번호를 반환합니다. 각 파티션의 첫 번째 행은 1로 시작합니다.
구문
- ROW_NUMBER ( ) OVER ( [ <partition_by_clause> ] <order_by_clause> )
<partition_by_clause> FROM 절이 생성한 결과 집합을 ROW_NUMBER 함수가 적용되는 파티션으로 나눕니다. PARTITION BY 구문은 OVER 절(Transact-SQL)을 참조하십시오.
<order_by_clause>
파티션에서 ROW_NUMBER 값이 행에 할당되는 순서를 결정합니다. 자세한 내용은 ORDER BY 절(Transact-SQL)를 참조하십시오. 순위 함수에 <order_by_clause>가 사용된 경우 정수는 열을 나타낼 수 없습니다.
반환형식
- bigint
주의
- ORDER BY 절은 지정된 파티션 내에서 행에 고유 ROW_NUMBER가 할당되는 순서를 결정합니다.
1. ROW_NUMBER() OVER(ORDER BY 정렬할 필드)
2. RANK() OVER(ORDER BY 정렬할 필드)
3. DENSE_RANK() OVER(ORDER BY 정렬할 필드)
세 가지 함수 모두 순위를 구하는 용도로 사용이 가능하다. 그러나 조금씩 용법이 다르다.
1. ROW_NUMBER() OVER()
- 순위를 구하기는 하나 같은 값에 대하여 무시를 한다.
2. RANK() OVER()
- 같은 값은 동등한 순위로 값을 반환한다. 예로 100, 95, 95, 84, 70, 70, 56 이라는 값이 있을 때 결과값은 1, 2, 2, 4, 5, 5, 7 이 된다.
3. DENSE_RANK() OVER()
- 같은 값을 동등한 순위로 값을 반환한다. 하지만 RANK()와 다르게 동등한 순위의 다음 순위는 순차적으로 메겨진다. 2번과 같은 예가 있을 경우 RANK()의 결과값은 1, 2, 2, 4, 5, 5, 7 이 되었지만, DENSE_RANK() OVER() 는 1, 2, 2, 3, 4, 4, 5가 된다.
실제 사용 예제)
1. ROW_NUMBER() OVER(ORDER BY 정렬할 필드)
2. RANK() OVER(ORDER BY 정렬할 필드)
3. DENSE_RANK() OVER(ORDER BY 정렬할 필드)
3.
======================================= MSSQL =======================================
UPDATE Auto
SET Auto.sort = A.rownum,
Auto.gid = \'0\'
FROM
(SELECT Oll.seq,
ROW_NUMBER() OVER (ORDER BY KWD.rownum DESC) rownum
FROM
(SELECT ROW_NUMBER() OVER (ORDER BY SearchCnt DESC) rownum,
cnt.keyword,
cnt.domain
FROM
(SELECT top(10000) keyword,
isnull(SUM(Search_Cnt),0) as SearchCnt,
domain
FROM tbl_ut_pop_kwd_data
WHERE domain = 'KTC'
GROUP BY keyword,
domain
ORDER BY SearchCnt DESC
)cnt
)AS KWD
INNER JOIN tbl_ut_autokeyword_test AS Oll
ON Oll.keyword = KWD.keyword
AND Oll.domain = KWD.domain
)A
INNER JOIN tbl_ut_autokeyword_test AS Auto
ON Auto.seq = A.seq
'SQL' 카테고리의 다른 글
[MSSQL] MSSQL 에서 EXISTS 함수 (0) | 2012.11.23 |
---|---|
[MSSQL]분석함수 정리 partition by, rank() over, row_number() over, dense_rank() over (0) | 2012.11.18 |
[MSSQL] group by Case , case group by (0) | 2012.11.18 |
[MSSQL]MSSQL ROW COUNT 쉽게 알아내기 (0) | 2012.11.17 |
[MSSQL] 데이터베이스에서 이메일 보내기 (0) | 2012.11.08 |