프로그래머스 SQL 고득점 Kit 의 SELECT 문제 중에서 대장균의 크기에 따라 분류하기 1,2를 풀어보았다.
같은 level3 로 묶여있으나 체감상 레벨 차이가 있다고 느껴졌다..
case when 과 window함수를 사용하여 풀이했다.
문제 1
https://school.programmers.co.kr/learn/courses/30/lessons/299307
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
대장균 개체의 크기가 100 이하라면 'LOW', 100 초과 1000 이하라면 'MEDIUM', 1000 초과라면 'HIGH'라고 분류합니다. 대장균 개체의 ID(ID)와 분류(SIZE)를 출력하는 SQL 문을 작성해 주세요. 이때 결과는 개체의 ID에 대해 오름차순 정렬해 주세요.
문제에 앞서...
문제의 조건에 맞게 select를 하기 위해 SQL의 조건문 중 하나인 case when을 사용한다.
case when 조건문
기본 문법은 아래와 같다.
CASE
WHEN 조건1 THEN 결과1
WHEN 조건2 THEN 결과2
ELSE 기본값
END
추가로 case when 절은 아래와 같은 특징을 가지고 있다.
✅ 조건에 따라 다른 값 반환 가능
✅ 집계 함수와 함께 사용 가능
✅ 정렬 기준을 동적으로 변경 가능
✅ 윈도우 함수와 함께 사용 가능
문제 풀이
1. 조건에 맞는 case when 조건문을 작성한다.
select case when size_of_colony <=100 then "LOW"
when size_of_colony <=1000 then "MEDIUM"
else "HIGH"
end as size
from ecoli_data
코드
select id, case when size_of_colony <=100 then "LOW"
when size_of_colony <=1000 then "MEDIUM"
else "HIGH"
end as size
from ecoli_data
order by id
크게 어렵지 않은 문제였다.
문제 2
https://school.programmers.co.kr/learn/courses/30/lessons/301649
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
대장균 개체의 크기를 내림차순으로 정렬했을 때 상위 0% ~ 25% 를 'CRITICAL', 26% ~ 50% 를 'HIGH', 51% ~ 75% 를 'MEDIUM', 76% ~ 100% 를 'LOW' 라고 분류합니다. 대장균 개체의 ID(ID) 와 분류된 이름(COLONY_NAME)을 출력하는 SQL 문을 작성해주세요. 이때 결과는 개체의 ID 에 대해 오름차순 정렬해주세요 . 단, 총 데이터의 수는 4의 배수이며 같은 사이즈의 대장균 개체가 서로 다른 이름으로 분류되는 경우는 없습니다.
문제에 앞서...
이전 포스팅에서 window 함수에 대해 간단히 정리했었다.
2025.02.07 - [SQL] - [프로그래머스/PRGMS] 299310 연도별 대장균 크기의 편차 구하기 (서브쿼리, Window 함수)
해당 문제에서는 그 중에서도 percent_rank() 함수를 사용한다.
PERCENT_RANK() OVER (
PARTITION BY partition_expression
ORDER BY
sort_expression [ASC | DESC]
)
문제 풀이
앞선 문제보다 조건이 조금 구체화되었다.
window 함수를 case when과 함께 사용하였다.
select id, percent_rank() over (order by size_of_colony) r from ecoli_data
size_of_colony를 기준으로 백분율 순위를 구한다.
구한 r 값을 기준으로 case when을 작성하면 된다.
코드
select id,
case when r <=0.25 then "LOW"
when r<=0.5 then "MEDIUM"
when r<=0.75 then "HIGH"
else "CRITICAL"
end as colony_name
from (select id, percent_rank() over (order by size_of_colony) r from ecoli_data) ranking
order by id
window 함수를 통해 percent_rank를 구하여 서브쿼리로 사용한다.
새로운 문제들이 추가되겠지만.. 이제 몇 문제 안 남았따.!!! 😁
'SQL' 카테고리의 다른 글
[프로그래머스/PRGMS] 299310 연도별 대장균 크기의 편차 구하기 (서브쿼리, Window 함수) (0) | 2025.02.07 |
---|---|
[프로그래머스/PRGMS] 298519 특정 조건을 만족하는 물고기별 수와 최대 길이 구하기 - SQL 고득점 Kit (4) | 2025.02.06 |