반응형
  • 티스토리 홈
  • 프로필사진
    쪼시
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
쪼시
  • 프로필사진
    쪼시
    • 분류 전체보기 (88)
      • OS (2)
        • Window (0)
        • Mac (0)
        • Linux (0)
        • Ubuntu (2)
      • Programming (5)
        • C (1)
        • C++ (0)
        • C# (0)
        • Java (0)
        • JVM Monitoring (1)
        • Python (0)
        • HTML5 (1)
        • CSS (0)
        • JavaScript (0)
        • React (0)
        • MATLAB (1)
      • DB (15)
        • CREATE (5)
        • SELECT (8)
        • UPDATE (1)
        • DELETE (1)
      • 코딩 테스트 (64)
        • C++ (2)
        • Java (0)
        • Python (0)
        • JavaScript (0)
        • SQL (62)
      • GIT (0)
      • Drone (0)
        • Model (0)
        • Info (0)
      • IT Info (0)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [프로그래머스][SQL 고득점 KIT][SELECT][Level 5] 멸종위기의 대장균 찾기
        2024년 10월 21일
        • 쪼시
        • 작성자
        • 2024.10.21.:50
        반응형

         

        [프로그래머스][SQL 고득점 KIT][SELECT][Level 5] 멸종위기의 대장균 찾기

         

        문제 설명

         

        대장균들은 일정 주기로 분화하며, 분화를 시작한 개체를 부모 개체, 분화가 되어 나온 개체를 자식 개체라고 합니다.
        다음은 실험실에서 배양한 대장균들의 정보를 담은 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개체는 존재합니다.


        예시

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

        ID PARENT_ID SIZE_OF_COLONY
        1 NULL 10
        2 NULL 2
        3 2 100
        4 2 16
        5 2 17
        6 4 101
        7 4 101
        8 6 1

         

        각 세대별 대장균의 ID는 다음과 같습니다.

        1 세대 : ID 1, ID 2
        2 세대 : ID 3, ID 4, ID 5
        3 세대 : ID 6, ID 7
        4 세대 : ID 8

        이 때 각 세대별 자식이 없는 대장균의 ID는 다음과 같습니다.

        1 세대 : ID 1
        2 세대 : ID 3, ID 5
        3 세대 : ID 7
        4 세대 : ID 8

        따라서 결과를 세대에 대해 오름차순 정렬하면 다음과 같아야 합니다.

        COUNT GENERATION
        1 1
        2 2
        1 3
        1 4

        문제 풀이

        1. 각 세대별 자식이 없는 개체의 수(COUNT)와 세대(GENERATION)를 출력하는 SQL문을 작성
        2. 이때 결과는 세대에 대해 오름차순 정렬
        3. 단, 모든 세대에는 자식이 없는 개체가 적어도 1개체는 존재
        WITH RECURSIVE GEN AS (
            -- 기본 케이스: 1세대 대장균 (부모가 없는 대장균)
            SELECT ID, PARENT_ID, 1 AS GENERATION
            FROM ECOLI_DATA
            WHERE PARENT_ID IS NULL
            
            UNION ALL
            
            -- 재귀 케이스: 다음 세대 대장균
            SELECT E.ID, E.PARENT_ID, G.GENERATION + 1
            FROM ECOLI_DATA E
            JOIN GEN G ON E.PARENT_ID = G.ID
        ), GEN_NO_CHILDREN AS (
            -- 자식이 없는 대장균 식별
            SELECT G.ID, G.GENERATION
            FROM GEN G
            LEFT JOIN ECOLI_DATA E ON G.ID = E.PARENT_ID
            WHERE E.ID IS NULL
        )
        -- 최종 결과: 세대별 자식 없는 대장균 수 집계
        SELECT 
            COUNT(ID) AS COUNT,
            GENERATION
        FROM GEN_NO_CHILDREN
        GROUP BY GENERATION
        ORDER BY GENERATION;
        • GEN 테이블은 부모 세대가 없는 NULL인 1세대 대장균이다.
        • 재귀 케이스를 통해 다음 세대 대장균을 찾아 +1 증가시킨다.
        • GEN_NO_CHILDREN 테이블은 자식이 없는 대장균을 식별하여 세대수를 +1 증가시킨다.
        • GEN_NO_CHILDREN 에서 세대별로 자식 없는 대장균의 수를 집계한다.
        • COUNT 함수로 개수를 세고, GENERATION으로 그룹화합니다.

        실행 결과

        COUNT GENERATION
        1 1
        2 2
        1 3
        1 4

         

        ** LEVEL5 문제는 처음 들어보는 함수들과 방법을 사용해서 계산을 해야 해서 답안을 보고도 이해가 잘 안 되는 부분이 있다.

        ** 더 공부를 해야할 것 같다.

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

        '코딩 테스트 > SQL' 카테고리의 다른 글

        [프로그래머스][SQL 고득점 KIT][SUM, MAX, MIN][Level 2] 가격이 제일 비싼 식품의 정보 출력하기  (1) 2024.10.21
        [프로그래머스][SQL 고득점 KIT][SUM, MAX, MIN][Level 1] 가장 비싼 상품 구하기  (1) 2024.10.21
        [프로그래머스][SQL 고득점 KIT][SELECT][Level 4] 특정 세대의 대장균 찾기  (0) 2024.10.21
        [프로그래머스][SQL 고득점 KIT][SELECT][Level 4] 오프라인/온라인 판매 데이터 통합하기  (2) 2024.10.21
        [프로그래머스][SQL 고득점 KIT][SELECT][Level 4] 서울에 위치한 식당 목록 출력하기  (5) 2024.10.21
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바