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

Posted by 요지
,