Algorithm

프로그래머스 Lv.3: 대장균의 크기에 따라 분류하기 1 - MySQL 풀이

서서리 2025. 3. 8. 00:37
SMALL

문제 설명

https://school.programmers.co.kr/learn/courses/30/lessons/299307

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

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

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

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

문제) 대장균 개체의 크기가 100 이하라면 'LOW', 100 초과 1000 이하라면 'MEDIUM', 1000 초과라면 'HIGH' 라고 분류합니다. 대장균 개체의 ID(ID) 와 분류(SIZE)를 출력하는 SQL 문을 작성해주세요.이때 결과는 개체의 ID 에 대해 오름차순 정렬해주세요.

예시

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

대장균 개체 ID(ID) 1,2,3 에 대해 개체의 크기는 각각 17, 150, 4000 이므로 분류된 이름은 각각 'LOW', 'MEDIUM', 'HIGH' 입니다. 따라서 결과를 개체의 ID 에 대해 오름차순 정렬하면 다음과 같아야 합니다.

풀이 과정

사이즈에 따라 분류하는 게 포인트인 문제입니다.
총 3가지로 분류해야 하니까 MySQL의 CASE문을 사용합니다.

정답 쿼리

SELECT ID, (CASE WHEN SIZE_OF_COLONY <= 100 THEN 'LOW'
            WHEN SIZE_OF_COLONY > 100 AND SIZE_OF_COLONY < 1000 THEN 'MEDIUM'
            ELSE 'HIGH' END) SIZE
FROM ECOLI_DATA

배운 점

  • CASE문
CASE
WHEN 조건1 THEN 조건1 참일 때 반환값
WHEN 조건2 THEN 조건2 참일 때 반환값
WHEN 조건3 THEN 조건3 참일 때 반환값
ELSE 위의 모든 조건이 거짓일 때 반환값
END
  • ELSE가 없는데 모든 조건이 거짓이 되면 NULL 값을 반환합니다.
  • END 뒤에 별칭(Alias)을 적는 게 일반적입니다. 적지 않으면 CASE문 전체가 컬럼명이 되기 때문입니다.
LIST