자두의 데브로그

[MySQL] 프로그래머스 대장균의 크기에 따라 분류하기 2 본문

코딩테스트/SQL

[MySQL] 프로그래머스 대장균의 크기에 따라 분류하기 2

왕자두 2024. 10. 10. 18:48

https://school.programmers.co.kr/learn/courses/30/lessons/301649

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

RANK() 함수는 쓸 일이 없어서 사용해 본 적이 없는데 심지어 PERCENT_RANK()는 있는지도 몰랐다.

 

  • RANK()
    데이터의 순위를 계산하는 함수
    동일한 값이 있을 경우 동일한 순위를 부여하며, 같은 값이 있을 경우 순위에 공백이 발생
    동률이 있을 경우 다음 순위는 건너뛰어짐
SELECT column_name,
       RANK() OVER (ORDER BY column_name DESC) AS rank
FROM table_name;
  • PERCENT_RANK()
    특정 값이 데이터 집합 내에서 백분율 순위를 계산하는 함수
    0에서 1 사이의 값으로 표현되며, 최소값은 0, 최대값은 1에 가까움
    데이터 집합에서 특정 행이 얼마나 상위에 위치하는지를 백분율로 나타냄
SELECT column_name,
       PERCENT_RANK() OVER (ORDER BY column_name DESC) AS percent_rank
FROM table_name;

 

✨ (PERCENT_)RANK() OVER (ORDER BY 컬럼) as ALIAS 로 SELECT 절에서 활용이 가능하다!

 

추가로, from에서 꼭 만들어져있는 테이블이 아니라 내가 새롭게 만들고 싶은 테이블을 만들어서 as ~로 alias 지정해서 만들게 되면 해당 테이블에 대해서 값을 select 할 수 있다.

-- 코드를 작성해주세요
select ed.ID as ID, 
case
    when ed.per <= 0.25 then 'CRITICAL'
    when ed.per <= 0.5 then 'HIGH'
    when ed.per <= 0.75 then 'MEDIUM'
    else 'LOW'
end as COLONY_NAME
from 
(select ID, PERCENT_RANK() over (order by SIZE_OF_COLONY desc) as per from ECOLI_DATA) as ed
order by ID;