KATA#97

codataffee·2024년 7월 25일
0

CODEKATA

목록 보기
97/114
post-thumbnail

WHAT IS KATA?

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

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


- SQL


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

✔️ 문제 #1: 특정 세대의 대장균 찾기

문제

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

✔️ 제출 쿼리

✔️ 쿼리 분석

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

    UNION ALL

    # 재귀적으로 다음 세대 찾기: 이전 세대의 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
)
# 3세대 개체의 ID 선택
SELECT ID
FROM Generation
WHERE Gen = 3
ORDER BY ID


✔️ 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인 개체들을 찾아 세대를 하나씩 증가시키기

최종 결과 선택

  • 3세대 개체의 ID 선택
SELECT ID 
FROM Generation 
WHERE Gen = 3 
ORDER BY ID
  • Gen 값이 3인 개체들을 선택하여 3세대 개체들 식별
  • 결과를 ID 오름차순으로 정렬하여 출력

+)

재귀 쿼리에 대한 설명

- WITH RECURSIVE 절 
   - SQL에서 재귀적으로 데이터를 처리하기 위해 
     WITH RECURSIVE 절을 사용한다.
   - CTE의 한 형태로, 자기 자신을 참조하여 
     반복적인 처리를 수행할 수 있게 한다.
     
- 초기 조건
  - 첫 번째 세대와 같이 재귀 처리를 시작하는 초기 조건을 정의. 
    이번 쿼리에서는 PARENT_ID가 NULL인 개체들을 첫 번째 세대로 선택

- 재귀 부분
  - UNION ALL을 사용하여 초기 조건에서 시작하여 
    다음 세대를 찾는 재귀적 구조를 맞춘다.
  - INNER JOIN을 통해 부모 ID가 
    이전 세대의 ID인 개체들을 찾아 세대 증가시키기.

- 종료 조건
  - 재귀 쿼리는 암묵적으로 종료 조건을 가진다. 
    이 쿼리에서는 더 이상 매칭되는 개체가 없을 때 재귀 종료

- 결과 선택
  - 마지막으로 원하는 세대의 데이터를 선택하여 조회
    이 쿼리에서는 3세대 개체들의 ID를 선택하고 정렬

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

0개의 댓글

관련 채용 정보