KATA#98

codataffee·2024년 7월 27일
0

CODEKATA

목록 보기
98/114
post-thumbnail

WHAT IS KATA?

KATA는 기술과 기술 향상에 초점을 맞춘 코드 챌린지입니다.
일부는 프로그래밍 기본 사항을 교육하는 반면 다른 일부는 복잡한 문제 해결에 중점을 둡니다.

이 용어는 The Pragmatic Programmer 라는 책의 공동 저자인 Dave Thomas 가
무술에서 일본의 카타 개념을 인정하면서 처음 만들어졌습니다.
Dave의 개념 버전은 코드 카타를 프로그래머가
연습과 반복을 통해 기술을 연마하는 데 도움이 되는 프로그래밍 연습으로 정의합니다.


- SQL


프로그래머스에서 SQL 문제 풀기

✔️ 문제 #1: 멸종위기의 대장균 찾기

문제

  • 부모 개체와 자식 개체의 관계를 세대로 표현하여
    각 세대별 자식이 없는 대장균의 갯수와 세대를 조회하는 쿼리 작성
  • 각 대장균 세대 기준 오름차순 정렬

✔️ 제출 쿼리

✔️ 쿼리 분석

WITH RECURSIVE Generation AS (
    # 첫 번째 세대 선택: PARENT_ID가 NULL인 개체를 찾음
    SELECT ID
         , PARENT_ID
         , 1 AS GENERATION
    FROM ECOLI_DATA
    WHERE PARENT_ID IS NULL

    UNION ALL

    # 재귀적으로 다음 세대 찾기: 이전 세대의 ID를 부모 ID로 가지는 개체를 찾음
    SELECT E.ID
         , E.PARENT_ID
         , G.GENERATION + 1 AS GENERATION
    FROM ECOLI_DATA E
    INNER JOIN Generation G ON E.PARENT_ID = G.ID
)
# 각 세대와 세대별 부모 ID가 없는 개체의 갯수 찾기
SELECT COUNT(G.ID) COUNT
     , G.GENERATION
FROM Generation G
WHERE G.ID NOT IN (
					SELECT PARENT_ID 
                    FROM Generation 
                    WHERE PARENT_ID IS NOT NULL
                    )
GROUP BY G.GENERATION
ORDER BY G.GENERATION


✔️ CHECK POINT

  • SQL
    • CTE 생성 (WITH RECURSIVE 절)

첫 번째 세대 선택

SELECT ID
	 , PARENT_ID
     , 1 AS Gen 
FROM ECOLI_DATA 
WHERE PARENT_ID IS NULL
  • PARENT_ID가 NULL인 개체들을 선택하여 첫 번째 세대로 설정
  • Gen 컬럼을 1로 설정하여 첫 번째 세대를 표시

재귀적으로 다음 세대 찾기

  • UNION ALL을 사용하여 첫 번째 세대의 자식 개체들을 재귀적으로 찾고,
  • INNER JOIN Generation G ON E.PARENT_ID = G.ID를 사용하여
    현재 세대의 ID를 부모 ID로 가지는 개체들을 찾기
SELECT E.ID
	 , E.PARENT_ID
     , G.Gen + 1 AS Gen 
FROM ECOLI_DATA E 
	 INNER JOIN Generation G ON E.PARENT_ID = G.ID
  • 부모 ID가 이전 세대의 ID인 개체들을 찾아 세대를 하나씩 증가시키기

최종 결과 선택

  • 각 세대별 부모 ID 가 존재하지 않는 개체를 찾고,
    세대별 갯수 조회
SELECT COUNT(G.ID) COUNT
     , G.GENERATION
FROM Generation G
WHERE G.ID NOT IN (
					SELECT PARENT_ID 
                    FROM Generation 
                    WHERE PARENT_ID IS NOT NULL
                    )
GROUP BY G.GENERATION
ORDER BY G.GENERATION
  • WHERE 조건절을 활용해 부모 ID 가 존재하지 않는 개체를 찾기
  • 세대별로 그룹화하여 각 그룹별 ID의 갯수 조회
  • 결과를 세대 오름차순으로 정렬하여 출력


profile
커피 좋아하는 데이터 꿈나무

0개의 댓글

관련 채용 정보