
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를 생각하지는 못했다.
그래도 사용방법은 익숙하니 흐름을 잘 익히면 될 것 같다.