카테고리:

윈도우 함수 (순위 관련)

ROW_NUMBER

윈도우 파티션 내의 각 행에 대해 고유한 행 번호를 반환합니다.

행 번호는 1에서 시작하여 순차적으로 계속됩니다.

구문

ROW_NUMBER() OVER (
  [ PARTITION BY <expr1> [, <expr2> ... ] ]
  ORDER BY <expr3> [ , <expr4> ... ] [ { ASC | DESC } ]
  )
Copy

인자

없습니다.

사용법 노트

  • expr1expr2 는 분할할 기준이 되는 열 또는 식을 지정합니다. 0개, 1개 또는 그 이상의 식을 기준으로 분할할 수 있습니다.

    예를 들어, 여러 주(또는 지방)에서 데이터를 선택하고, 각 주 내에서 1에서 N까지의 행 번호를 원한다고 가정합니다. 이 경우, 주를 기준으로 분할할 수 있습니다.

    단일 그룹만 원하는 경우, PARTITION BY 절을 생략하십시오.

  • expr3expr4 는 행의 순서를 결정하는 데 사용할 열 또는 식을 지정합니다. 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|
+--------+------------------+------------+
Copy

아래 쿼리는 파티션 내에서 행 번호를 할당하는 방법을 보여줍니다. 이 경우, 파티션은 증권 거래소입니다(예: “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|
+------+--------+------+----------+
Copy