CODING TEST/MySQL

Lv2 - 분기별 분화된 대장균의 개체 수 구하기

iamyuunzo 2025. 8. 1. 14:06

📌 문제 정보

- 문제 이름 : 프로그래머스 - (String, Date) 분기별 분화된 대장균의 개체 수 구하기

- 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/299308

 

 

 

📌 문제 요약

- ECOLI_DATA 테이블 : ID(개체의 ID), PARENT_ID(부모 개체의 ID), SIZE_OF_COLONY(개체의 크기), DIFFERENTIATION_DATE(분화 되어 나온 날짜), GENOTYPE(개체의 형질)

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

 

예시)

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

 

출력)

QUARTER  ECOLI_COUNT
1Q 2
2Q 2
3Q 1
4Q 1

 

 

 

📌 내 풀이 및 코드

SELECT 
  q AS QUARTER,                  -- 분기 숫자를 'QUARTER'라는 별칭으로 표시
  COUNT(*) AS ECOLI_COUNT        -- 해당 분기에 분화된 대장균 개수 세기
FROM (
  SELECT 
    QUARTER(DIFFERENTIATION_DATE) AS q  -- 날짜를 기반으로 분기(1~4) 추출
  FROM ECOLI_DATA
) sub
GROUP BY q                      -- 분기별로 그룹핑
ORDER BY q;                     -- 분기 오름차순 정렬

- 서브쿼리 쓰는 방법 몰라서 틀림..

 

 

 

 

📌 새로 배운 문법

<-- 이번 문제에서 새로 배운 Java 문법 정리 -->

** QUARTER() **

- 날짜 함수(Date Function) : 날짜가 속한 분기 (1~4) 반환

 

** 서브쿼리 (Subquery / Derived Table) **

- FROM (...) sub 구조 : 내부 SELECT 결과를 임시 테이블(sub)처럼 쓰는 기법