728x90
[MySQL] PERCENT_RANK()
PERCENT_RANK()
데이터 내에서 특정 값의 상대적인 순위를 백분률로 반환한다.
0과 1사이의 값을 반환하며, 값이 0이면 가장 낮은 순위, 1이면 가장 높은 순위를 의미한다.
PERCENT_RANK() OVER ([PARTITION BY partition_expression] ORDER BY order_expression)
동작 원리
PERCENT_RANK()는 각 행의 순위를 기준으로 계산된다.
$$PERCENTRANK()=\frac{Rank-1}{TotalRows-1}$$
여기서 RANK는 해당 행의 순위이며, Total Rows는 전체 행의 수이다.
ex) 데이터가 10개인 경우 PERCENT_RANK()는 각 행의 순위를 0부터 1까지 나눈 값을 반환한다.
💡 OVER()
윈도우 함수를 정의할 때 사용된다.
over() 구문을 통해 데이터 집합을 나누고(Partitioning), 각 파티션 내에서 순서를 정의(Ordering) 할 수 있다.
OVER ([PARTITION BY partition_expression] ORDER BY order_expression)
✔ PARTITION BY
: 해당 옵션을 사용하면 데이터 집합을 특정 기준으로 나눌 수 있다.
이때 나뉜 그룹별로 순위를 매기게 되고, 생략하면 전체 데이터 집합에 대해 순위를 매긴다.
EXAMPLE
아래 예제에서는 employees 테이블에서 각 직원의 급여(salary)에 대한 백분율 순위를 계산한다.
급여를 내림차순으로 정렬 후, 그에 따른 PERCENT_RANK를 계산한다.
SELECT
employee_id,
salary,
PERCENT_RANK() OVER (ORDER BY salary DESC) AS salary_percent_rank
FROM
employees;
각 부서(department_id)별로 직원들의 급여 순위를 백분율로 계산하는 법도 가능하다.
아래 SQL문의 경우 부서별로 따로 순위를 매겨 백분율을 구하게 된다.
SELECT
department_id,
employee_id,
salary,
PERCENT_RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS salary_percent_rank
FROM
employees;
반응형
'💾 Data > SQL' 카테고리의 다른 글
[MySQL] 데이터를 구분자로 Split 하기 (0) | 2024.09.13 |
---|---|
[MySQL] EXISTS (0) | 2024.09.11 |
[MySQL] INNER, LEFT, RIGHT JOIN (0) | 2024.08.12 |
[MySQL] SQL 변수 선언 및 사용 (0) | 2024.08.06 |
[MySQL] DB 테이블 row 수 확인 (0) | 2024.04.23 |