[Programmers/mysql] 301649: 대장균의 크기에 따라 분류하기 2

songeunm·2024년 9월 8일

PS - sql

목록 보기
9/58
post-thumbnail

문제

Lv. 4 / SELECT

문제 흐름

처음에 혹시 MySQL에 QUANTILE이라는 함수가 있는건 아닐까..?! 해서 찾아봤는데 그건 아닌 것 같다.
얌전히 RANK를 활용해서 백분위를 계산했다.

상위로 계산해야하는데, 처음에는

(1 - RANK() OVER (ORDER BY SIZE_OF_COLONY) / (SELECT COUNT(1) FROM ECOLI_DATA)) * 100 as PER

와 같이 작성했었다. 참고로 틀렸다.
괜히 돌아서 가는 것 같은데 여기서 1 빼주다가 소숫점이 달라져서 COLONY_NAME이 달라질 수도 있겠다 생각했다.
그래서 RANK에서 ORDER BY 할 때 DESC를 붙여 바로 내림차순 정렬하는 방식으로 수정했다.
수정된 전체 코드는 아래와 같다.

코드

/*
대장균의 크기에 따라 분류하기 2
SELECT, RANK
*/

SELECT  ID,
        CASE WHEN PER <= 25 THEN 'CRITICAL'
        WHEN PER <= 50 THEN 'HIGH'
        WHEN PER <= 75 THEN 'MEDIUM'
        ELSE 'LOW'
        END AS COLONY_NAME
FROM (
SELECT  *,
        RANK() OVER (ORDER BY SIZE_OF_COLONY DESC) / (SELECT COUNT(1) FROM ECOLI_DATA) * 100 PER
FROM ECOLI_DATA
) AS PER_TABLE
ORDER BY ID;

마무리

사실은 처음에 바로 RANK를 생각하지는 못했다.
그래도 사용방법은 익숙하니 흐름을 잘 익히면 될 것 같다.

profile
데굴데굴 구르는 개발자 지망생

0개의 댓글