■ 사용 문법
RANK OVER
혹은
NTILE
■ 사용 방법
우선 SIZE_OF_COLONY를 RANK함수로 순위를 나눠주고 이후 백분율을 구해주었다.
그리고 기준에 따라 랭크를 입력하게 해주었다.
내가 푼 방식은 굉장히 복잡하고 정신없었는데, 이것을 쉽게 해준 것이 NTILE 함수다.
NTILE은 파티션을 설정할 수 있어 파티션 갯수에 따라 순위를 나누어준다.
■ 코드
SELECT C.ID,
(CASE
WHEN C.PERCENTAGE <= 25 THEN 'CRITICAL'
WHEN C.PERCENTAGE <= 50 AND C.PERCENTAGE > 25 THEN 'HIGH'
WHEN C.PERCENTAGE <= 75 AND C.PERCENTAGE > 50 THEN 'MEDIUM'
ELSE 'LOW'
END) AS 'COLONY_NAME'
FROM (
SELECT
A.ID,
B.COLONY_RANK,
(B.COLONY_RANK / (SELECT COUNT(*) FROM ECOLI_DATA)) * 100 AS PERCENTAGE
FROM
ECOLI_DATA AS A
JOIN (
SELECT
ID,
RANK() OVER (ORDER BY SIZE_OF_COLONY DESC) AS COLONY_RANK
FROM
ECOLI_DATA
) AS B ON A.ID = B.ID
GROUP BY
A.ID,
B.COLONY_RANK) AS C
ORDER BY C.ID
* NTILE 사용시
SELECT B.ID,
(
CASE
WHEN B.COLONY_LEVEL = 1 THEN 'CRITICAL'
WHEN B.COLONY_LEVEL = 2 THEN 'HIGH'
WHEN B.COLONY_LEVEL = 3 THEN 'MEDIUM'
ELSE 'LOW'
END) AS 'COLONY_NAME'
FROM
(SELECT ID, NTILE(4)
OVER(ORDER BY SIZE_OF_COLONY DESC) AS "COLONY_LEVEL"
FROM ECOLI_DATA) AS B
ORDER BY B.ID
728x90
'개발 > SQL' 카테고리의 다른 글
프로그래머스SQL_부모의 형질을 모두 가지는 대장균 찾기 (0) | 2024.05.06 |
---|---|
프로그래머스SQL_특정 세대의 대장균 찾기 (0) | 2024.05.05 |
프로그래머스SQL_대장균의 크기에 따라 분류하기 1 (0) | 2024.05.03 |
프로그래머스SQL_대장균들의 자식의 수 구하기 (0) | 2024.05.02 |
프로그래머스SQL_서울에 위치한 식당 목록 출력하기 (1) | 2024.05.01 |