꿈은 데이터분석가, 취미는 계획

[MY SQL] 크기를 기준으로 비율별 그룹(등급) 만들기 본문

SQL/sql문풀

[MY SQL] 크기를 기준으로 비율별 그룹(등급) 만들기

data_2080 2024. 4. 10. 12:20
728x90

출처: [프로그래머스 스쿨 - 코딩테스트 연습 - MY SQL 문제] :  대장균의 크기에 따라 분류하기

링크: https://school.programmers.co.kr/learn/courses/30/lessons/301649


문제(일부):  개체의 크기를 내림차순으로 정렬했을 때 0% ~ 25% 를 'CRITICAL', 26% ~ 50% 를 'HIGH', 51% ~ 75% 를 'MEDIUM', 76% ~ 100% 를 'LOW' 라고 분류

 

1. 윈도우 함수 PERCENT_RANK활용하기

1) WITH절에서 PERCENT_RANK를 사용하여 행별 백분율을 표현

2) CASE구문으로 등급을 부여

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

 

2. 윈도우 함수 NTILL 활용하기

1) 전체 데이터를 N개로 동일하게 분할하는 NTILL함수 활용하여 25%씩 분할

2) 분할된 수에 따라 등급 부여

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

 

728x90