[SQL] Programmers_SELECT. 특정 세대의 대장균 찾기
Programmers_SELECT. 특정 세대의 대장균 찾는 문제를 파헤쳐 보자 :)
Programmers_SELECT. 대장균의 크기에 따라 분류하는 문제를 파헤쳐 보자 :)
ECOLI_DATA 테이블PARENT_ID 는 NULL 값입니다.ID) 와 분류된 이름(COLONY_NAME)을 출력하는 SQL 문을 작성해주세요.ID에 대해 오름차순 정렬해주세요.SELECT A.ID, CASE WHEN A.PERCENT <= 0.25 THEN 'CRITICAL' WHEN A.PERCENT <= 0.5 THEN 'HIGH' WHEN A.PERCENT <= 0.75 THEN 'MEDIUM' ELSE'LOW' END AS COLONY_NAME FROM (SELECT *, PERCENT_RANK() OVER (ORDER BY SIZE_OF_COLONY DESC) AS PERCENT FROM ECOLI_DATA) A ORDER BY A.ID;
SELECT *, PERCENT_RANK() OVER (ORDER BY SIZE_OF_COLONY DESC) AS PERCENT FROM ECOLI_DATA
SIZE_OF_COLONY를 기준으로 개체 크기를 내림차순 정렬한 뒤 각 데이터의 백분위(PERCENT)를 계산한다.PERCENT_RANK() 함수즉,
- 상위 25% → 0.25 이하
- 상위 50% → 0.5 이하
- 상위 75% → 0.75 이하
FROM ( SELECT *, PERCENT_RANK() OVER (ORDER BY SIZE_OF_COLONY DESC) AS PERCENT FROM ECOLI_DATA ) A
A로 생성한다.즉, 이후 메인 쿼리에서A.PERCENT값을 기준으로 등급을 분류할 수 있다.
CASE WHEN A.PERCENT <= 0.25 THEN 'CRITICAL' WHEN A.PERCENT <= 0.5 THEN 'HIGH' WHEN A.PERCENT <= 0.75 THEN 'MEDIUM' ELSE 'LOW' END AS COLONY_NAME
즉, 크기가 큰 군집일수록 높은 위험 등급을 부여한다.
SELECT A.ID, CASE WHEN A.PERCENT <= 0.25 THEN 'CRITICAL' WHEN A.PERCENT <= 0.5 THEN 'HIGH' WHEN A.PERCENT <= 0.75 THEN 'MEDIUM' ELSE 'LOW' END AS COLONY_NAME ORDER BY A.ID;
ID)에 대해 백분위 기반 위험 등급(COLONY_NAME)을 부여하고 ID 기준으로 정렬하여 반환한다.SELECT A.ID, CASE WHEN A.PERCENT <= 0.25 THEN 'CRITICAL' WHEN A.PERCENT <= 0.5 THEN 'HIGH' WHEN A.PERCENT <= 0.75 THEN 'MEDIUM' ELSE 'LOW' END AS COLONY_NAME FROM ( SELECT *, PERCENT_RANK() OVER (ORDER BY SIZE_OF_COLONY DESC) AS PERCENT FROM ECOLI_DATA ) A ORDER BY A.ID;
SIZE_OF_COLONY)를 기준으로 백분위를 계산하고COLONY_NAME)을 부여한 뒤ID와 등급(COLONY_NAME)을 출력한다.