본문 바로가기
Algorithm

[프로그래머스] 2️⃣ 분기별 분화된 대장균의 개체 수 구하기

by 옥돔이와 연근이 2025. 3. 31.
728x90
반응형

🔗 문제 링크 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 


⛈️  문제 설명 

 

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

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

Column name Type Nullable

ID INTEGER FALSE
PARENT_ID INTEGER TRUE
SIZE_OF_COLONY INTEGER FALSE
DIFFERENTIATION_DATE DATE FALSE
GENOTYPE INTEGER FALSE

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


문제

각 분기(QUARTER)별 분화된 대장균의 개체의 총 수(ECOLI_COUNT)를 출력하는 SQL 문을 작성해주세요. 이때 각 분기에는 'Q' 를 붙이고 분기에 대해 오름차순으로 정렬해주세요. 대장균 개체가 분화되지 않은 분기는 없습니다.


예시

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

ID PARENT_ID SIZE_OF_COLONY DIFFERENTIATION_DATE GENOTYPE

1 NULL 10 2019/01/01 5
2 NULL 2 2019/05/01 3
3 1 100 2020/01/01 4
4 2 17 2022/04/01 4
5 2 10 2020/09/01 6
6 4 101 2021/12/01 22

각 분기별로 분화된 대장균 개체는 다음과 같습니다.

1분기 : ID 1, ID 3

2분기 : ID 2, ID 4

 

 


⛈️  풀이 과정

 

  • 1. 해당 분기에 따라서 범위를 지정한다
    • 1분기 : 1~ 3
    • 2분기 : 4~6
    • 3분기 : 7~9
    • 4분기 : 10 ~ 12
  • 2. 분기별 수를 카운트 하기 위해서 group by를 사용하여 계산 

 


⛈️  풀이 코드

-- ECOLI_DATA

SELECT 
    CASE 
    WHEN MONTH(DIFFERENTIATION_DATE) BETWEEN 1 AND 3 THEN '1Q'
    WHEN MONTH(DIFFERENTIATION_DATE) BETWEEN 4 AND 6 THEN '2Q'
    WHEN MONTH(DIFFERENTIATION_DATE) BETWEEN 7 AND 9 THEN '3Q'
    ELSE  '4Q'
    END AS QUARTER, COUNT(*) AS ECOLI_COUNT
FROM ECOLI_DATA
GROUP BY QUARTER
ORDER BY QUARTER;

 

☀️  한번 더 생각해 보자! 

 

📍CASE문 활용법
📍concat 을 이용한 문자열 처리 

 

 

 

728x90