몸과 마음이 건전한 SW 개발자

[SQL-SELECT] 프로그래머스 Lv. 3 대장균의 크기에 따라 분류하기 2 [다시 풀어 보기] 본문

SQL/다시 풀어 보기

[SQL-SELECT] 프로그래머스 Lv. 3 대장균의 크기에 따라 분류하기 2 [다시 풀어 보기]

스위태니 2024. 12. 22. 16:44

문제 링크

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

정답 코드

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

풀이 과정

 

  1. NTILE(4)로 분류:
    • NTILE(4) 함수를 사용해 SIZE_OF_COLONY 기준으로 데이터를 내림차순 정렬하고 상위 25%씩 4개의 그룹으로 나눈다.
    • 그룹 번호는 1부터 4까지 생성된다.
  2. CASE 문으로 범주화:
    • RANK_GROUP의 값을 기준으로 범주를 분류한다:
      • 1: 'CRITICAL'
      • 2: 'HIGH'
      • 3: 'MEDIUM'
      • 4: 'LOW'
  3. 결과 출력:
    • ID와 COLONY_NAME을 출력하고, 결과를 ID 기준으로 오름차순 정렬한다.

 

느낀점

  • NTILE(숫자) OVER (내림차순, 오름차순)에 대해 배웠다.
  • 꼭 다시 보고 익히면 좋을 것 같다.