알고리즘/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