Programmers Lv.3
- 대장균의 크기에 따라 분류하기 2
👉 문제 바로가기(프로그래머스)
# 대장균 개체의 크기를 내름차순으로 정렬했을 때
# 상위 0% ~ 25% 를 'CRITICAL', 26% ~ 50% 를 'HIGH', 51% ~ 75% 를 'MEDIUM', 76% ~ 100% 를 'LOW' 라고 분류하여 조회
# ID 오름차순 정렬하여 조회
SELECT
ID,
CASE WHEN PERCENT_RANK() OVER (ORDER BY SIZE_OF_COLONY DESC) <= 0.25 THEN 'CRITICAL'
WHEN PERCENT_RANK() OVER (ORDER BY SIZE_OF_COLONY DESC) > 0.25 AND
PERCENT_RANK() OVER (ORDER BY SIZE_OF_COLONY DESC) <= 0.5 THEN 'HIGH'
WHEN PERCENT_RANK() OVER (ORDER BY SIZE_OF_COLONY DESC) > 0.5 AND
PERCENT_RANK() OVER (ORDER BY SIZE_OF_COLONY DESC) <= 0.75 THEN 'MEDIUM'
WHEN PERCENT_RANK() OVER (ORDER BY SIZE_OF_COLONY DESC) > 0.75 THEN 'LOW'
END as COLONY_NAME
FROM ECOLI_DATA
ORDER BY ID
[ 논리 과정 ]
SIZE_OF_COLONY
로 내림차순하여 순위를 구한다.- 퍼센트 구간에 따라
COLONY_NAME
을 할당하여 조회한다.
[ 문제 상황 ]
SIZE_OF_COLONY
순위를 구하더라도 해당 데이터가 전체 데이터에서 차지하는 비율(%)을 산출할 수가 없다.
[ 해결 ]
PERCENT_RANK() OVER()
를 사용하여 각 데이터 행별로 전체 데이터에서 몇 퍼센트를 차지하는지 산출한다.- 그 다음
CASE WHEN ~ THEN
구문을 활용하여COLONY_NAME
을 할당한다.
[ 회고 ]
- RANK 함수와 더불어 윈도우 함수 학습이 필요하다.
PERCENT_RANK() OVER()
구문을CASE WHEN ~ THEN
구문과 함께 사용하여 반복 작성 되었는데, PERCETN_RANK를 구한 테이블을 FROM절에서 서브쿼리로 JOIN하여 SELECT절의 복잡도를 해소시킬 수도 있을 것 같다.
'DA Study > TIL' 카테고리의 다른 글
[TIL] 비트연산자를 활용한 이진수 비교 # MYSQL # SQL (1) | 2025.01.01 |
---|---|
[TIL] SUM함수, CASE WHEN ~ THEN 구문 활용 #SQL #SQLite #solvesql (1) | 2024.12.30 |
[TIL] DATEDIFF(), LEFT OUTER JOIN # MYSQL (2) | 2024.12.27 |
[TIL] 동적 웹페이지 스크래핑, 크롤링하기 #python3 #FConline (1) | 2024.12.27 |
[TIL] shrftime()으로 날짜 요일로 변환하기 #SQL #SQLite #solvesql (3) | 2024.12.24 |