Algorithm/SQL

대장균의 크기에 따라 분류하기2

danso 2024. 7. 23. 13:17

💡 문제설명

대장균들은 일정 주기로 분화하며, 분화를 시작한 개체를 부모 개체, 분화가 되어 나온 개체를 자식 개체라고 합니다.

다음은 실험실에서 배양한 대장균들의 정보를 담은 ECOLI_DATA 테이블입니다. ECOLI_DATA 테이블의 구조는 다음과 같으며, ID, PARENT_ID, SIZE_OF_COLONY, DIFFERENTIATION_DATE, GENOTYPE 은 각각 대장균 개체의 ID, 부모 개체의 ID, 개체의 크기, 분화되어 나온 날짜, 개체의 형질을 나타냅니다.대장균들은 일정 주기로 분화하며, 분화를 시작한 개체를 부모 개체, 분화가 되어 나온 개체를 자식 개체라고 합니다.

다음은 실험실에서 배양한 대장균들의 정보를 담은 ECOLI_DATA 테이블입니다. ECOLI_DATA 테이블의 구조는 다음과 같으며, ID, PARENT_ID, SIZE_OF_COLONY, DIFFERENTIATION_DATE, GENOTYPE  각각 대장균 개체의 ID, 부모 개체의 ID, 개체의 크기, 분화되어 나온 날짜, 개체의 형질을 나타냅니다.

 

 

최초의 대장균 개체의 PARENT_ID  NULL 값입니다.

 

💡 문제

대장균 개체의 크기를 내름차순으로 정렬했을 상위 0% ~ 25% 'CRITICAL', 26% ~ 50% 'HIGH', 51% ~ 75% 'MEDIUM', 76% ~ 100% 'LOW' 라고 분류합니다. 대장균 개체의 ID(ID) 분류된 이름(COLONY_NAME) 출력하는 SQL 문을 작성해주세요. 이때 결과는 개체의 ID 대해 오름차순 정렬해주세요 . , 데이터의 수는 4 배수이며 같은 사이즈의 대장균 개체가 서로 다른 이름으로 분류되는 경우는 없습니다.

 

예시

예를 들어 ECOLI_DATA 테이블이 다음과 같다면

기준에 의해 분류된 대장균들의 ID는 다음과 같습니다.

CRITICAL (상위 0% ~ 25%) : ID 6, ID 7
HIGH (상위 26% ~ 50%) : ID 3, ID 5
MEDIUM (상위 51% ~ 75%) : ID 1, ID 4
LOW (상위 76% ~ 100%) : ID 2, ID 8

따라서 결과를 ID 대해 오름차순 정렬하면 다음과 같아야 합니다.

 풀이

SELECT ED.ID, 
    CASE
    WHEN ED.calc_rank = 1 THEN 'CRITICAL'
    WHEN ED.calc_rank = 2 THEN 'HIGH'
    WHEN ED.calc_rank = 3 THEN 'MEDIUM'
    ELSE 'LOW'
    END as COLONY_NAME
FROM
    ( 
    SELECT ID,
        NTILE(4) OVER(ORDER BY SIZE_OF_COLONY DESC) 'calc_rank'
    FROM ECOLI_DATA) ED
ORDER BY ED.ID

 

출처

https://school.programmers.co.kr/learn/challenges?tab=sql_practice_kit