알고리즘/SQL
[PROG] LV3 대장균의 크기에 따라 분류하기 2 (MySQL)
세동세
2024. 10. 17. 18:40
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/301649
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
와,, 플그머로 SQL 안푼지 오래되었더니,, 수준이 한참 높아졌구나.. ㅜ
참고를 안하면 못풀겠다..
풀이
PERCENT_RANK()
상대 순위함수로 현재 행 값에 대해 0 ~ 1사이의 상대값을 리턴한다.
가장 작은 값은 0 가장 큰 값은 1에 가까운 값을 갖는다.
1. 첫번째 값은 항상 0이다.
2. 동일한 값이 여러 개일 경우, 동일한 순위로 처리된다.
3. 해당 값의 순위는 (순번 - 1) / (전체 행 개수 - 1)로 계산된다.
코드
SELECT
E.ID,
CASE
WHEN E.PERCENT <= 0.25 THEN 'CRITICAL'
WHEN E.PERCENT <= 0.5 THEN 'HIGH'
WHEN E.PERCENT <= 0.75 THEN 'MEDIUM'
ELSE 'LOW'
END AS COLONY_NAME
FROM (
SELECT ID,
PERCENT_RANK() OVER
(ORDER BY SIZE_OF_COLONY DESC) AS PERCENT
FROM ECOLI_DATA
) AS E
ORDER BY E.ID