[SQL 문제 풀기] 대장균의 크기에 따라 분류하기 2(301649)

lhs's avatar
Feb 28, 2025
[SQL 문제 풀기] 대장균의 크기에 따라 분류하기 2(301649)
 

1. 문제 풀이 아이디어

  • RANK() 함수로 내림차순 순위를 매기고 COUNT(*) OVER()로 전체 개수를 구한 후, 비율에 따라 그룹을 나눠 문제를 해결한다.

2. 나의 정답 코드

WITH ranks AS ( SELECT id, RANK() OVER (ORDER BY size_of_colony DESC) AS r, COUNT(*) OVER () AS total_count FROM ecoli_data ) SELECT id, CASE WHEN r * 1.0 / total_count <= 0.25 THEN 'CRITICAL' WHEN r * 1.0 / total_count <= 0.5 THEN 'HIGH' WHEN r * 1.0 / total_count <= 0.75 THEN 'MEDIUM' ELSE 'LOW' END AS colony_name FROM ranks ORDER BY id;

3. 정리

  • RANK() OVER (ORDER BY size_of_colony DESC)를 사용하여 내림차순으로 순위를 매긴다.
  • COUNT(*) OVER ()를 사용하여 전체 개수를 한 번만 계산하여 성능을 개선한다.
  • CASE 문에서 r / total_count의 비율을 기준으로 4개의 등급으로 나눈다.
  • ORDER BY id를 적용하여 결과를 id 기준으로 정렬한다.
Share article

LHS's Study Space