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;
반응형