AI/SQL

[SQL] 조건문 CASE, 윈도우 함수 PERCENT RANK(백분율 순위), NTILE

brave_sol 2024. 12. 6. 12:20
프로그래머스 SQL 고득점 kit 5일차( SELECT level3-3문제, level 3 끝!, level4-2문제)

 

1. 조건문 CASE

- 순차적으로 위에서부터 계산하여 조건을 만족하지 않은 행만 다음 조건으로 넘어간다.(중복적용 x)

CASE
    WHEN 조건1 THEN 결과1
    WHEN 조건2 THEN 결과2
    ...
    ELSE 기본결과
END AS 별칭(필요시)

 

2. 윈도우 함수

- 특정 그룹(WINDOW) 내에서 각 행에 대해 연산을 수행하는 함수

- OVER : 윈도우 함수를 쓸 때 반드시 필요하며, 특정 그룹을 정의하거나 데이터를 정렬할 때 사용

- 행과 관련된 데이터를 계산하면서도 원본 행을 유지

 

1) PERCENTE RANK

- 데이터의 백분율 순위 → 0~1사이의 값을 반환

PERCENT_RANK() OVER (PARTITION BY 파티션_기준 ORDER BY 정렬_기준 ASC|DESC)

 

2) NTILE

- 데이터를 균등하게 N개로 나눔   1 ~ N 구간번호를 반환

NTILE(N) OVER (PARTITION BY 파티션_기준 ORDER BY 정렬_기준 ASC|DESC)

 

3. 문제 풀이 비교

1) PERCENT RANK

SELECT ID, 
    CASE
        WHEN PERCENT_RANK() OVER (ORDER BY SIZE_OF_COLONY DESC) <=0.25 THEN 'CRITICAL'
        WHEN PERCENT_RANK() OVER (ORDER BY SIZE_OF_COLONY DESC) <=0.50 THEN 'HIGH'
        WHEN PERCENT_RANK() OVER (ORDER BY SIZE_OF_COLONY DESC) <=0.75 THEN 'MEDIUM'
        ELSE 'LOW'
    END AS COLONY_NAME
FROM ECOLI_DATA
ORDER BY ID

 

2) NTILE

SELECT 
    ID,
    SIZE_OF_COLONY,
    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 ID;

 

반응형