ROW_NUMBER
ROW_NUMBER
ROW_NUMBER() 함수는 윈도우 파티션(window partition) 안의 각 행에 고유한 행 번호를 반환해요.
행 번호는 1부터 시작해 순차적으로 계속 증가해요.
본문
문법
ROW_NUMBER() OVER (
[ PARTITION BY <expr1> [, <expr2> ... ] ]
ORDER BY <expr3> [ , <expr4> ... ] [ { ASC | DESC } [ NULLS { FIRST | LAST } ] ]
)
인자
없음.
사용 메모
expr1과expr2는 파티션으로 나눌 컬럼 또는 표현식을 지정해요. 0개, 1개 또는 그 이상의 표현식으로 파티션을 나눌 수 있어요. 예를 들어 여러 주(state 또는 province)에 걸친 데이터를 선택하면서 각 주 안에서 1부터 N까지의 행 번호를 원한다면 주로 파티션을 나눌 수 있어요. 단일 그룹만 원한다면 PARTITION BY 절을 생략하면 돼요.expr3과expr4는 행의 순서를 결정하는 데 사용할 컬럼 또는 표현식을 지정해요. 1개 이상의 표현식으로 정렬할 수 있어요. 예를 들어 옥수수 생산량 순으로 농부를 나열하려면bushels_produced컬럼을 사용하면 돼요. 자세한 내용은 예제(이 주제 안)를 참고하세요.
예제
아래 쿼리는 파티션 안에서 행 번호를 할당하는 방법을 보여줘요. 이 경우 파티션은 주식 거래소(예: "N"은 "NASDAQ")예요.
SELECT
symbol,
exchange,
shares,
ROW_NUMBER() OVER (PARTITION BY exchange ORDER BY shares) AS row_number
FROM trades;
+------+--------+------+----------+
|SYMBOL|EXCHANGE|SHARES|ROW_NUMBER|
+------+--------+------+----------+
|SPY |C | 250| 1|
|AAPL |C | 250| 2|
|AAPL |C | 300| 3|
|SPY |N | 100| 1|
|AAPL |N | 300| 2|
|SPY |N | 500| 3|
|QQQ |N | 800| 4|
|QQQ |N | 2000| 5|
|YHOO |N | 5000| 6|
+------+--------+------+----------+