반응형
순위함수(분석함수)
결과에 순번, 순위를 매기는 함수
비집계함수 중 RANK, NTILE, DENSE_RANK, ROW_NUMBER 등이 해당된다.
SELECT <순위함수이름> (arguments) OVER ([PARTITION BY <partion_by_list>] ORDER BY <order_by_list>) FROM 테이블명; |
PARTITION BY : 동일 그룹으로 묶어줄 칼럼 명 지정
ORDER BY : Partition 정의에 지정된 컬럼에 대한 정렬 수행
RANK() 함수
해당 함수는 ORDER BY 문에서 정의한 순서에 따라 각 행에게 순위를 부여합니다.
순위는 숫자 1부터 시작해 순차적인 숫자를 부여합니다.
RANK() 함수는 여러 행의 값이 동일한 일종의 동점인 상황이 발생하면 해당 동일한 값을 가진 행들에게 모두 같은 순위를 부여해 줍니다. 그리고 그다음으로 나온 값에겐 직전에 동점이라서 같은 순위를 부여했던 행의 개수만큼을 뛰어넘은 순위를 부여해 줍니다.
이러한 이유로 RANK() 함수가 반환한 순위는 따지고 보면 연속적인 숫자라고는 말하기는 좀 그렇다.
-- 인구수가 많은 순서대로 랭킹 지정하기
SELECT c.*, RANK() OVER(ORDER BY Population DESC) AS rnk
FROM city c ;
구분막(파티션) 내의 순위 부여하기
-- 도시코드별 인구수 랭킹 지정하기
SELECT c.*, RANK() OVER(PARTITION BY CountryCode ORDER BY Population DESC) AS rnk
FROM city c ;
반응형
'DB > MySQL' 카테고리의 다른 글
[MySQL] ROW_NUMBER() 함수 (0) | 2023.01.17 |
---|---|
[MySQL] DENSE_RANK() 함수 (0) | 2023.01.17 |
[MySQL] 쿼리 작성 및 최적화 (0) | 2022.11.22 |
[MySQL] 쿼리문 통계(일간/주간/월간/기간별), DATE_FORMAT() (0) | 2022.11.11 |
[Mysql] 소수점 존재하는 데이터 확인하기 (0) | 2022.10.04 |