MYSQL 함수를 정리하는 노트입니다.
순위 함수
- 특정 컬럼을 기준으로 순위를 구하는 함수
- 중복 값 처리 방식에 따라 RANK() OVER, DENSE_RANK() OVER, ROW_NUMBER() OVER로 구분된다.
- 그룹을 나눈 뒤 각 그룹 내에서 순위 부여가 필요할 경우 RANK() OVER(PARTITION~ )을 사용한다.
RANK
- 같은 값이 있을 경우, 그 개수 만큼 건너 뛰고 다음 순위를 부여한다.
- ex) 90, 80, 80, 80, 70 → 1, 2, 2, 2, 5..
RANK() OVER(ORDER BY 컬럼명 (ASC|DESC)) (AS 별칭)
- 예시: 사원테이블에서 입사년도가 가장 빠른 직원부터 순위를 부여하여 조회하시오
SELECT
EMPLOYEE_ID AS 사원번호,
HIRE_DATE AS 입사일자,
RANK() OVER(ORDER BY HIRE_DATE ASC) AS 순위
FROM HR.EM;
SELECT **RANK() OVER (
ORDER BY**
CASE @sort
WHEN "diff" THEN curr - prev
WHEN "diff_ratio" THEN IFNULL(ROUND(((curr - prev) / prev * 100), 2), 0)
END
**DESC
)**
DENSE_RANK
- 같은 값이 있을 경우, 다음 순위는 무조건 1 더한 값으로 부여한다.
- ex) 90, 80, 80, 80, 70 → 1, 2, 2, 2, 3…
DENSE_RANK() OVER(ORDER BY 컬럼명 (ASC|DESC)) (AS 별칭)
- 예시: 사원테이블에서 입사년도가 가장 빠른 직원부터 순위를 부여하여 조회하시오