일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- v-combobox
- vue #vue-router
- github action #tistory
- nextjs
- kubernetes
- vue3
- vuejs
- mixedcontent
- basepath
- vuetify3
- postman
- 라우터 #NAT #포트 #포트포워딩 #유동고정아이피 #DHCP
- browserstorage
- MongoDB
- sesstionstorage
- vuejs #pinia #vuetify3
- vworld
- CKEditor4
- JavaScript
- MPA
- javascript #localstorage #stringify #parse
- PersistentVolumeClaim
- OpenLayers
- localstorage
- react
- javascript #컴파일 #인터프리터
- PersistentVolume
- Yarn
- 인터넷 #클라이언트 #서버 #포트 #ipadress #domainname
- 맥 #나스 #SMA
- Today
- Total
月亮
[SQL] 순위 : RANK() , DENSE_RANK() , ROW_NUMBER() , NTILE() 본문
SQL에서 순위 함수는 데이터를 정렬하고 해당 데이터의 순위를 계산하는 데 사용된다.
네 가지 일반적인 순위 함수인 RANK, DENSE_RANK 및 ROW_NUMBER 및 NTILE가 있다.
1. RANK:
RANK 함수는 정렬된 데이터에서 각 레코드의 순위를 계산합니다.
동일한 값을 가진 항목에 대해서는 같은 순위를 부여하고, 그 다음 순위는 중복된 항목 수 만큼 건너뛰어 부여합니다.
예를 들어, 1, 2, 2, 3, 4라는 값이 있을 때 RANK 함수를 사용하면 1, 2, 2, 3, 4의 순위는 각각 1, 2, 2, 4, 5가 됩니다.
즉, 순위를 부여하면 중복된 항목이 있을 경우 순위가 건너뛰게 됩니다.
2. DENSE_RANK:
DENSE_RANK 함수는 RANK 함수와 유사하지만 중복된 항목이 있을 경우 순위를 건너뛰지 않고 순차적으로 순위를 부여합니다.
따라서 DENSE_RANK 함수를 사용하면 동일한 값에 대해 중복 순위가 부여됩니다.
예를 들어, 1, 2, 2, 3, 4라는 값이 있을 때 DENSE_RANK 함수를 사용하면 1, 2, 2, 3, 4의 순위는 각각 1, 2, 2, 3, 4가 됩니다.
중복된 값에 대해서도 중복되지 않는 순차적인 순위를 부여합니다.
3. ROW_NUMBER:
ROW_NUMBER 함수는 정렬되지 않은 데이터 집합에서 각 레코드의 고유한 번호를 부여합니다.
정렬된 데이터를 기반으로 순위를 계산하는 RANK 및 DENSE_RANK와 달리 ROW_NUMBER는 순서가 지정되지 않은 데이터에서 사용됩니다. 따라서 ROW_NUMBER 함수를 사용하면 순위가 아니라 데이터의 원래 순서에 따라 번호가 매겨집니다. ROW_NUMBER 함수는 일반적으로 순위 계산이 필요하지 않은 경우에 사용됩니다.
4. NTILE:
NTILE 함수는 결과 집합을 지정된 개수의 동일한 크기로 분할하고, 각 그룹에 번호를 할당하는 윈도우 함수입니다. NTILE 함수는 일반적으로 백분위수를 계산하거나 결과를 여러 그룹으로 분할할 때 사용됩니다.
예) NTILE(3), NTILE(4)...
요약하자면,
- RANK 함수: 중복된 항목에 대해 순위를 건너뛰고 순위를 부여합니다.
- DENSE_RANK 함수: 중복된 항목에 대해 중복 순위를 부여합니다.
- ROW_NUMBER 함수: 정렬되지 않은 데이터 집합에서 각 레코드에 고유한 번호를 부여합니다.
- NTILE 함수: 결과 집합을 지정된 개수의 동일한 크기로 분할하고, 각 그룹에 번호를 할당합니다. 이를 통해 백분위수 계산이나 결과를 여러 그룹으로 분할하는데 사용됩니다.
예제
CREATE TABLE scores (
num int NOT NULL,
name varchar(50),
score int
);
insert into scores (num,name, score) VALUE (1,'John',85);
insert into scores (num,name, score) VALUE (2,'Alice',90);
insert into scores (num, name, score) VALUE (3,'Bob',80);
insert into scores (num, name, score) VALUE (4,'Mary',90);
insert into scores (num, name, score) VALUE (5,'Tom',75);
select num,
name,
score,
RANK() over (order by score desc) as RANK,
DENSE_RANK() over (order by score desc) as DENSE_RANK,
ROW_NUMBER() over (order by num) as ROW_NUMBER,
NTILE(3) OVER (ORDER BY score DESC) AS ntile_group
from scores order by num;
(ROW_NUMBER는 num 기준)
출처:
https://im-first-rate.tistory.com/36
https://learn.microsoft.com/ko-kr/sql/t-sql/functions/ntile-transact-sql?view=sql-server-ver16
'SQL' 카테고리의 다른 글
[mysql] 원격으로 mysql dump하고 import하기 (0) | 2023.07.26 |
---|