본문 바로가기
Skills/SQL

[프로그래머스] SQL - '대장균의 크기에 따라 분류하기 2' 문제풀이

by 602yu 2024. 4. 22.

 

 

 

문제 링크입니다.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

 

문제 설명

 

 

 

문제

 

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

 

 

풀이1 - 윈도우 함수 PERCENT_RANK 사용
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

 

 

 

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

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

 

 

 

풀이2 - 윈도우 함수 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 ID

 

   1. 전체 데이터를 N개로 동일하게 분할하는 NTILE함수 활용하여 25%씩 분할
   2. 분할된 수에 따라 등급 부여