ROW_NUMBER

ROW_NUMBER

ROW_NUMBER() 함수는 윈도우 파티션(window partition) 안의 각 행에 고유한 행 번호를 반환해요.

행 번호는 1부터 시작해 순차적으로 계속 증가해요.

출처: Snowflake SQL Reference

본문

문법

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|
+------+--------+------+----------+

더 알아보기