- 카테고리:
윈도우 함수 (순위 관련)
ROW_NUMBER¶
윈도우 파티션 내의 각 행에 대해 고유한 행 번호를 반환합니다.
행 번호는 1에서 시작하여 순차적으로 계속됩니다.
구문¶
ROW_NUMBER() OVER (
[ PARTITION BY <expr1> [, <expr2> ... ] ]
ORDER BY <expr3> [ , <expr4> ... ] [ { ASC | DESC } ]
)
인자¶
없습니다.
사용법 노트¶
expr1
및expr2
는 분할할 기준이 되는 열 또는 식을 지정합니다. 0개, 1개 또는 그 이상의 식을 기준으로 분할할 수 있습니다.예를 들어, 여러 주(또는 지방)에서 데이터를 선택하고, 각 주 내에서 1에서 N까지의 행 번호를 원한다고 가정합니다. 이 경우, 주를 기준으로 분할할 수 있습니다.
단일 그룹만 원하는 경우,
PARTITION BY
절을 생략하십시오.expr3
및expr4
는 행의 순서를 결정하는 데 사용할 열 또는 식을 지정합니다. 1개 이상의 식을 기준으로 정렬할 수 있습니다.예를 들어, 옥수수 생산량에 따라 농부를 나열하려면
bushels_produced
열을 사용합니다. 자세한 내용은 이 항목에 있는 예 를 참조하십시오.
예¶
농부들을 옥수수 생산량에 따라 내림차순으로 표시하고, 그 순서대로 행 번호를 할당합니다(옥수수를 가장 많이 생산하는 농부는 행 번호 1을 가짐).
SELECT state, bushels_produced, ROW_NUMBER() OVER (ORDER BY bushels_produced DESC) FROM corn_production; +--------+------------------+------------+ | state | bushels_produced | ROW_NUMBER | +--------+------------------+------------+ | Kansas | 130 | 1| | Kansas | 120 | 2| | Iowa | 110 | 3| | Iowa | 100 | 4| +--------+------------------+------------+
아래 쿼리는 파티션 내에서 행 번호를 할당하는 방법을 보여줍니다. 이 경우, 파티션은 증권 거래소입니다(예: “NASDAQ”의 경우 “N”).
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|
+------+--------+------+----------+