[프로그래머스] 대장균의 크기에 따라 분류하기 2

yannie·2024년 10월 18일
0

[문제]

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

[풀이]

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

[코드리뷰]

  1. 서브쿼리
    이 서브쿼리는 대장균의 크기를 기준으로 각 객체에 대해 백분위 순위를 계산한다.
SELECT ID,
    PERCENT_RANK() OVER(ORDER BY SIZE_OF_COLONY DESC) AS PER
FROM ECOLI_DATA
  • PERCENT_RANK()함수:
    • 각 대장균 개체의 크기를 내림차순으로 정렬한 후, 각 개체가 전체에서 어느 정도 상위에 위치하는지 백분위(퍼센트)로 표시한다.
    • 결과는 0과 1 사이의 값으로 출력된다. -> 0: 가장 큰 값, 1: 가장 작은 값
    • OVER(ORDER BY SIZE_IF_COLONY DESC)
      : 크기를 기준으로 내림차순 정렬하여 가장 큰 대장균이 가장 높은 순위를 갖도록 함
  1. CASE문
    : 백분위로 계산된 PER 값에 따라 개체를 네 가지 등급으로 분류
CASE 
    WHEN A.PER <= 0.25 THEN 'CRITICAL'
    WHEN A.PER <= 0.5 THEN 'HIGH'
    WHEN A.PER <= 0.75 THEN 'MEDIUM'
    ELSE 'LOW'
END AS COLONY_NAME
  • 적절한 구간에 해당하는 등급 이름을 반환함
  1. ORDER BY A.ID
    : ID를 기준으로 오름차순 정렬

기억해!

PERCENT_RANK()함수가 있는지도 몰랐다..

PERCENT_RANK()함수
: SQL에서 주어진 값의 상대적인 위치를 백분율로 나타내는 함수

  • 특정 값이 전체 데이터에서 어느 정도 위치에 있는지 알 수 있다.
  • 범위를 0에서 1 사이의 값으로 표현한다.
  • 이 함수는 주로 데이터의 상위/하위 백분률 계산이 필요할 때 사용한다.

OVER()의 역할?
: PERCENT_RANK()윈도우 함수에 OVER()절을 사용해 특정 기준에 따라 계산을 수행한다.
-> 어떤 정렬 순서로 백분위 순위를 매길 것인지 지정할 수 있다.
-> 해당 함수가 어떻게 이루어질지 결정 => 정렬 기준을 제공하는 역할을 함

0개의 댓글