프로그래머스 Lv.5 - 멸종위기의 대장균 찾기

2024. 7. 1. 13:48·SQL/MySQL
반응형

 

 

프로그래머스

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

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 값입니다.


문제

각 세대별 자식이 없는 개체의 수(COUNT)와 세대(GENERATION)를 출력하는 SQL문을 작성해주세요. 이때 결과는 세대에 대해 오름차순 정렬해주세요. 단, 모든 세대에는 자식이 없는 개체가 적어도 1개체는 존재합니다.


풀이

  • GENERATION 데이터를 포함한 테이블(GENER)을 WITH RECURSIVE CTE 활용하여 생성
  • GENER 테이블의 ID가 ECOLI_DATA 테이블의 PARENT_ID인 데이터 LEFT JOIN
  • GENERATION을 GROUP BY 그룹화
  • COUNT: ECOLI_DATA에 데이터가 없는 대장균 COUNT() 
  • GENERATION: 오름차순 정렬 ORDER BY ASC
WITH RECURSIVE GENER (ID, PARENT_ID, GENERATION) AS (
    SELECT ID, PARENT_ID, 1
    FROM ECOLI_DATA
    WHERE PARENT_ID IS NULL
    
    UNION ALL 
    
    SELECT ECOLI_DATA.ID, ECOLI_DATA.PARENT_ID, GENERATION + 1
    FROM ECOLI_DATA
    INNER JOIN GENER ON GENER.ID = ECOLI_DATA.PARENT_ID
)

SELECT COUNT(GENER.ID) AS COUNT, GENERATION
FROM GENER
LEFT JOIN ECOLI_DATA as child ON child.PARENT_ID = GENER.ID
WHERE child.ID IS NULL
GROUP BY GENERATION
ORDER BY GENERATION ASC

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'SQL > MySQL' 카테고리의 다른 글

DBLock, 블로킹, DeadLock  (0) 2025.05.02
프로그래머스 Lv.4 - 연간 평가점수에 해당하는 평가 등급 및 성과금 조회하기  (0) 2024.07.01
MySQL CTE(Common Table Expression) 공통 테이블 표현식  (0) 2022.09.16
'SQL/MySQL' 카테고리의 다른 글
  • DBLock, 블로킹, DeadLock
  • 프로그래머스 Lv.4 - 연간 평가점수에 해당하는 평가 등급 및 성과금 조회하기
  • MySQL CTE(Common Table Expression) 공통 테이블 표현식
helperwoo
helperwoo
\ೕ( ・ㅂ・)و /
  • helperwoo
    WooLog
    helperwoo
  • 전체
    오늘
    어제
    • All (55)
      • Web (25)
        • PHP (6)
        • Java (5)
        • Javascript (8)
        • Laravel (2)
        • Spring Boot (0)
        • React.js (1)
        • Electron.js (1)
        • Vue.js (1)
        • Nest.js (1)
      • Mobile (2)
        • Flutter (2)
      • SQL (1)
        • MySQL (4)
      • Docker (6)
      • Server (7)
      • Git (2)
      • Tool (3)
      • AI (2)
      • Tip (3)
      • Log (0)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      MYSQL
      image
      ollama
      DB연동
      ignorecase
      Laravel
      nginx
      dart
      frankenphp
      vscode
      챌린지
      http
      git
      코드
      websocket
      CLI
      JavaScript
      CTE
      데이터베이스
      php
      recursive
      flutter
      deepseek
      엘리스
      docker
      프로그래머스
      apache
      알고리즘
      with
      Compose
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    helperwoo
    프로그래머스 Lv.5 - 멸종위기의 대장균 찾기
    상단으로

    티스토리툴바