본문 바로가기
PS/SQL

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

by 행복한라이언 2024. 5. 2.
728x90
반응형

문제링크

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

 

프로그래머스

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

programmers.co.kr

 

1. 핵심

  • percent_rank() over (partition by 컬럼 order by 컬럼)
    • percent_rank() over (partition by ~ order by ~)
    • partition by 컬럼: 해당 컬럼으로 group을 구성하고 그 안에서 랭킹 선정
    • order by 컬럼: 해당 컬럼기준으로 asc는 가장 적은게 1등. desc는 가장 큰 게 1등으로 선정
  • NTILE(n) OVER (ORDER BY 컬럼)
    • 예를 들어, 데이터를 4분위수로 나누고자 할 때, NTILE(4)를 사용하여 데이터를 4개의 구간으로 나눔
    • order by 컬럼: order로 정렬한 후에 n개의 구간으로 나눈다.

2. 코드(MySQL)

-- percent_rank() 라는 윈도우함수 존재

with tmp as (
    select ID,
        percent_rank() over (order by SIZE_OF_COLONY desc) as RN
    from ECOLI_DATA
)

select ID, RN,
    case
        when RN <= 0.25 then 'CRITICAL'
        when RN <= 0.5 then 'HIGH'
        when RN <= 0.75 then 'MEDIUM'
        else 'LOW'
    end as COLONY_NAME
from tmp
order by ID asc;
  • [실행결과 일부]

WITH tmp AS (
    SELECT ID,
        NTILE(4) OVER (ORDER BY SIZE_OF_COLONY DESC) AS NT
    FROM ECOLI_DATA
)

SELECT ID,
    CASE NT
        WHEN 1 THEN 'CRITICAL'
        WHEN 2 THEN 'HIGH'
        WHEN 3 THEN 'MEDIUM'
        ELSE 'LOW'
    END AS COLONY_NAME
FROM tmp
ORDER BY ID ASC;
728x90
반응형