CASE 문 + 서브쿼리 + 집계함수를 사용할 때 OVER() 윈도우 함수를 사용해 주어야 하는 문제이다.
--대장균의 크기에 따라 분류하기 2
SELECT ID,
CASE
WHEN IDX / TOTAL_CNT <= 0.25 THEN 'CRITICAL'
WHEN IDX / TOTAL_CNT <= 0.5 THEN 'HIGH'
WHEN IDX / TOTAL_CNT <= 0.75 THEN 'MEDIUM'
ELSE 'LOW'
END COLONY_NAME
FROM (
SELECT ID,
SIZE_OF_COLONY,
ROW_NUMBER() OVER (ORDER BY SIZE_OF_COLONY DESC) IDX,
COUNT(*) OVER() TOTAL_CNT
FROM ECOLI_DATA
) sub
ORDER BY ID ASC;
SQL
복사