PERCENT_RANK() 함수, NTILE() 함수

Minji Lee·2025년 5월 2일
0

데이터베이스

목록 보기
5/5

PERCENT_RANK() 함수
PARTITION 또는 RESULT SET 내에서, 행의 백분위수 순위를 계산하는 Window 함수
→ 0에서 1 사이의 숫자 반환
100으로 곱하면 퍼센트로 나타낼 수 있음

기본 구문

PERCENT_RANK() OVER (
	PARTITION BY 구분 기준
    ORDER BY 정렬 기준 [ASC | DESC]
)

예시 문제

대장균의 크기에 따라 분류하기 2

대장균 개체의 크기를 내름차순으로 정렬했을 때 상위 0% ~ 25% 를 'CRITICAL', 26% ~ 50% 를 'HIGH', 51% ~ 75% 를 'MEDIUM', 76% ~ 100% 를 'LOW' 라고 분류합니다. 대장균 개체의 ID(ID) 와 분류된 이름(COLONY_NAME)을 출력하는 SQL 문을 작성해주세요. 이때 결과는 개체의 ID 에 대해 오름차순 정렬해주세요 . 단, 총 데이터의 수는 4의 배수이며 같은 사이즈의 대장균 개체가 서로 다른 이름으로 분류되는 경우는 없습니다.

SELECT ID, (CASE
    WHEN (PERCENT_RANK() OVER (ORDER BY SIZE_OF_COLONY DESC))*100 <= 25 THEN 'CRITICAL'
    WHEN (PERCENT_RANK() OVER (ORDER BY SIZE_OF_COLONY DESC))*100 <= 50 THEN 'HIGH'
    WHEN (PERCENT_RANK() OVER (ORDER BY SIZE_OF_COLONY DESC))*100 <= 75 THEN 'MEDIUM'
    ELSE 'LOW'
    END) AS COLONY_NAME
FROM ECOLI_DATA
ORDER BY 1;
  • 백분위 구한 후 100을 곱해서 퍼센트로 나타내기

NTILE() 함수
PARTITION을 지정된 수 만큼의 등급으로 나누어 각 등급 번호 출력
→ 지정한 수 만큼 그룹을 나눔

기본 구문

NTILE(나눌 그룹 수) OVER (ORDER BY 기준점 [ASC | DESC])

위의 예시 문제 NTILE() 함수로 풀기

SELECT ID, (CASE
            WHEN NTILE(4) OVER (ORDER BY SIZE_OF_COLONY DESC) = 1 THEN 'CRITICAL'
            WHEN NTILE(4) OVER (ORDER BY SIZE_OF_COLONY DESC) = 2 THEN 'HIGH'
            WHEN NTILE(4) OVER (ORDER BY SIZE_OF_COLONY DESC) = 3 THEN 'MEDIUM'
            ELSE 'LOW'
           END) AS COLONY_NAME
FROM ECOLI_DATA
ORDER BY 1;

0개의 댓글