MySQL/MariaDB rank 함수. 랭킹(순위) 구하기.
RANK() 함수
- 동일한 순위를 가진 값들에 대해 동일한 순위를 할당.
- 다음 순위는 건너뛰기. ex) 1,1,3,4,,,,
ex) 두 행이 동일한 값을 가지고 1위로 지정되면, 그 다음 행은 3위로 순위가 됨.
예제 1 ) sale_amount 기준으로 순위 매기기.
SELECT id, salesperson, sale_item, sale_amount, RANK() OVER (ORDER BY sale_amount DESC) as rank FROM sales; |
결과. - rank 1 : 2개. rank 2 : 없음. 다음 rank : 3.
id | salesperson | sale_item | sale_amount | rank ----------------------------------------------------------------- 1 | Alice | item1 | 5000 | 1 3 | Charlie | item1 | 5000 | 1 4 | Alice | item3 | 4000 | 3 2 | Bob | item2 | 3000 | 4 5 | Eve | item2 | 3000 | 4 |
예제 2): 파티션 내, salesperson기준으로 순위 매기기
- PARTITION BY 절을 사용하면 특정 열을 기준으로 데이터를 그룹화하여 각 그룹 내에서 순위를 매길 수 있습니다. ORDER BY 절은 각 파티션 내에서 순위를 매길 때 사용합니다.
- 판매원 기준으로 데이터를 파티션화하고, 각 판매원 내에서 판매 금액 순으로 순위를 매기기.
SELECT id, salesperson, sale_item, sale_amount, RANK() OVER (PARTITION BY salesperson ORDER BY sale_amount DESC) as rank FROM sales; |
결과 -
id | salesperson | sale_item | sale_amount | rank -------------------------------------- 1 | Alice | item1 | 5000 | 1 4 | Alice | item3 | 4000 | 2 3 | Charlie | item1 | 5000 | 1 2 | Bob | item2 | 3000 | 1 5 | Eve | item2 | 3000 | 1 |
DENSE_RANK() 함수
- 동일한 값들에 대해 동일한 순위를 할당.
- 다음 순위는생략되지 않고, 순서대로 매김 ex) 1,1,2,3
ROW_NUMBER():함수
- 동일한 값들에 대해서도 각 행에 고유한 순위 번호를 부여
'MySQL MariaDB > SQL 문법' 카테고리의 다른 글
MariaDB.CREATE INDEX (0) | 2024.11.11 |
---|---|
기본 SQL 디버깅.쿼리 디자인. (1) | 2024.11.08 |
MySQL/MariaDB row_number 함수. 랭킹(순위) 구하기. (0) | 2024.07.15 |
MySQL/MariaDB dense_rank 함수. 랭킹(순위) 구하기. (0) | 2024.07.15 |
MySQL / MariaDB case. when. then. 단일/다중 조건문. (0) | 2022.01.19 |
MySQL/MariaDB 세션 확인 / Session kill (0) | 2021.12.17 |
MariaDB/MySQL 정규표현식 (Regular Expression) (0) | 2021.12.09 |
MySQL / MariaDB like와 in을 동시 사용 => regexp (0) | 2021.12.09 |
댓글