SQL에서 특정 칼럼을 기준으로 번호를 매길 수 있다.
아래와 같은 예시 테이블을 만든다.
번호를 매기는 코드는 아래와 같다.
위 코드를 실행시키면 아래와 같은 결과를 얻을 수 있다.
기본 문법은 row_number () over (order by columns)이다. 더 자세히 살펴보자.
아래와 같은 예시 테이블을 만든다.
1 2 3 4 5 6 7 8 9 10 | CREATE TABLE body (height float, _name text); INSERT INTO body VALUES(174.52, 'Tom'); INSERT INTO body VALUES(167.33, 'Lucy'); INSERT INTO body VALUES(174.52, 'Frank'); INSERT INTO body VALUES(168.89, 'Jane'); INSERT INTO body VALUES(177.80, 'Robert'); INSERT INTO body VALUES(175.77, 'Robert'); INSERT INTO body VALUES(175.77, 'Robert'); INSERT INTO body VALUES(170.40, 'Robert'); |
번호를 매기는 코드는 아래와 같다.
1 2 3 | select row_number() over (partition by _name order by _name) as _number, _name, height from body ; |
위 코드를 실행시키면 아래와 같은 결과를 얻을 수 있다.
기본 문법은 row_number () over (order by columns)이다. 더 자세히 살펴보자.
- order by는 번호를 매기는 기준을 나타낸다. 다시말해 order by의 칼럼을 기준으로 번호를 매긴다. Robert의 키가 큰 순서로 번호를 매기기 위해 desc를 붙여 내림차순을 해주었다. desc가 없으면 오름차순으로 번호를 매긴다.
- partition by는 파티션(그룹)을 만들어서 번호를 매긴다. partition by _name이므로 _name을 기준으로 파티션을 만들어서 파티션 안에서 order by로 번호를 매긴다. _name으로 파티션을 만들었으므로 _name이 다른 행들은 모두 1이 되고, Robert는 4개의 데이터로 번호가 매겨졌다. partition by가 없다면 전체 행을 oreder by 기준으로 번호를 매긴다.
- Robet의 동점을 살펴보자. '175.55"는 동점이다. rank함수와 달리 동점을 같은 번호로 매기지 않고 계속 번호를 매긴다. 동점이 2개 있기 때문에 2, 3이 매겨지고 다음 번호 순서는 4가 된다.
끝.
- partition by는 파티션(그룹)을 만들어서 번호를 매긴다. partition by _name이므로 _name을 기준으로 파티션을 만들어서 파티션 안에서 order by로 번호를 매긴다. _name으로 파티션을 만들었으므로 _name이 다른 행들은 모두 1이 되고, Robert는 4개의 데이터로 번호가 매겨졌다. partition by가 없다면 전체 행을 oreder by 기준으로 번호를 매긴다.
- Robet의 동점을 살펴보자. '175.55"는 동점이다. rank함수와 달리 동점을 같은 번호로 매기지 않고 계속 번호를 매긴다. 동점이 2개 있기 때문에 2, 3이 매겨지고 다음 번호 순서는 4가 된다.
끝.
댓글
댓글 쓰기