문제
대장균 개체의 크기를 내름차순으로 정렬했을 때 상위 0% ~ 25% 를 'CRITICAL', 26% ~ 50% 를 'HIGH', 51% ~ 75% 를 'MEDIUM', 76% ~ 100% 를 'LOW' 라고 분류합니다. 대장균 개체의 ID(ID) 와 분류된 이름(COLONY_NAME)을 출력하는 SQL 문을 작성해주세요. 이때 결과는 개체의 ID 에 대해 오름차순 정렬해주세요 . 단, 총 데이터의 수는 4의 배수이며 같은 사이즈의 대장균 개체가 서로 다른 이름으로 분류되는 경우는 없습니다.
순간적으로 RANK 가 떠올라서 어떻게쓰는지 구글 검색 후 적용했다.
SIZE_OF_COLONY 내림차순한 기준으로 순서를 매기고, 등급 구분함.
RANK를 사용하는 경우 COUNT(*) 가 아니라 COUNT(*) OVER 를 써야 전체 행 개수를 셀 수 있다.
SELECT ID,
CASE
WHEN rank() over (order by SIZE_OF_COLONY desc) <= COUNT(*) OVER ()/4*1 THEN 'CRITICAL'
WHEN rank() over (order by SIZE_OF_COLONY desc) <= COUNT(*) OVER ()/4*2 THEN 'HIGH'
WHEN rank() over (order by SIZE_OF_COLONY desc) <= COUNT(*) OVER ()/4*3 THEN 'MEDIUM'
WHEN rank() over (order by SIZE_OF_COLONY desc) <= COUNT(*) OVER ()/4*4 THEN 'LOW'
END AS COLONY_NAME
FROM ECOLI_DATA
ORDER BY ID
GPT한테 물어보니 아래 방법이 더 효율적이라고 한다~!
SELECT
ID,
CASE
WHEN r <= total / 4 * 1 THEN 'CRITICAL'
WHEN r <= total / 4 * 2 THEN 'HIGH'
WHEN r <= total / 4 * 3 THEN 'MEDIUM'
ELSE 'LOW'
END AS COLONY_NAME
FROM (
SELECT
ID,
RANK() OVER (ORDER BY SIZE_OF_COLONY DESC) AS r,
COUNT(*) OVER () AS total
FROM ECOLI_DATA
ORDER BY ID
) AS ranked;'코딩테스트 연습 > programmers' 카테고리의 다른 글
| [프로그래머스] 단어 변환 - JAVA (0) | 2025.10.31 |
|---|---|
| [프로그래머스] 부모의 형질을 모두 가지는 대장균 찾기 - MYSQL (0) | 2025.10.27 |
| [프로그래머스] 타겟 넘버 - JAVA (0) | 2025.10.26 |
| [프로그래머스] 특정 물고기를 잡은 총 수 구하기 - MYSQL (0) | 2025.10.26 |
| [프로그래머스] 조건에 맞는 개발자 찾기 - MYSQL (0) | 2025.10.26 |