Image

Lv.2 🔗분기별 분화된 대장균의 개체 수 구하기

📝문제 요약

문제 설명

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

다음은 실험실에서 배양한 대장균들의 정보를 담은 ECOLI_DATA 테이블입니다. ECOLI_DATA 테이블의 구조는 다음과 같으며, IDPARENT_IDSIZE_OF_COLONYDIFFERENTIATION_DATEGENOTYPE 은 각각 대장균 개체의 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

3분기 : ID 5

4분기 : ID 6

따라서 결과는 다음과 같아야 합니다

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


✏️문제 풀이

SELECT

SELECT CASE WHEN MONTH(DIFFERENTIATION_DATE) IN (1, 2, 3) THEN '1Q' 
            WHEN MONTH(DIFFERENTIATION_DATE) IN (4, 5, 6) THEN '2Q' 
            WHEN MONTH(DIFFERENTIATION_DATE) IN (7, 8, 9) THEN '3Q' 
            ELSE '4Q' END QUARTER,
            COUNT(*) AS ECOLI_COUNT
  • QUARTER : 각 분기
    • MONTH(DIFFERENTIATION_DATE) : 월을 확인하여
      • 1, 2, 3이면 1Q
      • 4, 5, 6이면 2Q
      • 7, 8, 9이면 3Q
      • 그 밖의 달(10, 11, 12)이면 4Q
  • ECOLI_COUNT : 각 분기 별 분화된 대장균의 개체의 총 수
    • COUNT(*) : 데이터의 개수를 셈

FROM

FROM ECOLI_DATA
  • ECOLI_DATA 테이블을 사용

GROUP BY

GROUP BY 1
  • 1번 컬럼(QUARTER)을 기준으로 그룹화

ORDER BY

ORDER BY 1
  • 1번 컬럼(QUARTER)을 기준으로 오름차순 정렬


💯제출 코드

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

댓글남기기