코딩테스트
25/04/22 프로그래머스 SQL 고득점 Kit
helena1129
2025. 4. 22. 23:42
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
3세대의 대장균의 ID(ID) 를 출력하는 SQL 문을 작성해주세요. 이때 결과는 대장균의 ID 에 대해 오름차순 정렬해주세요.
1) 서브쿼리 + 조인
-- S: ID
-- F: ECOLI_DATA
-- W: 3세대
-- O: ID ASC
SELECT ID
FROM ECOLI_DATA ED INNER JOIN
(SELECT ID AS PARENT_ID
FROM ECOLI_DATA
WHERE PARENT_ID IN
(SELECT ID
FROM ECOLI_DATA
WHERE PARENT_ID IS NULL)) SG ON ED.PARENT_ID = SG.PARENT_ID
ORDER BY ID
2) 재귀함수
-- S: ID
-- F: ECOLI_DATA
-- W: 3세대
-- O: ID ASC
WITH RECURSIVE CTE AS(
SELECT ID, PARENT_ID, 1 AS GEN
FROM ECOLI_DATA
WHERE PARENT_ID IS NULL # 초기조건
UNION ALL
SELECT R.ID, R.PARENT_ID, GEN+1 AS GEN
FROM CTE INNER JOIN ECOLI_DATA R ON R.PARENT_ID = CTE.ID # 반복조건)
SELECT ID
FROM CTE
WHERE GEN = 3
ORDER BY ID
NOTE: 재귀함수 꼭 기억하기!
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
각 세대별 자식이 없는 개체의 수(COUNT)와 세대(GENERATION)를 출력하는 SQL문을 작성해주세요. 이때 결과는 세대에 대해 오름차순 정렬해주세요. 단, 모든 세대에는 자식이 없는 개체가 적어도 1개체는 존재합니다.
-- S: 자식이 없는 개체의 수, 세대
-- F: ECOLI_DATA
-- O: GENERATION ASC
WITH RECURSIVE CTE AS(
SELECT ID, PARENT_ID, 1 AS GENERATION
FROM ECOLI_DATA
WHERE PARENT_ID IS NULL # 초기조건
UNION ALL
SELECT R.ID, R.PARENT_ID, GENERATION+1 AS GENERATION
FROM CTE INNER JOIN ECOLI_DATA R ON R.PARENT_ID = CTE.ID # 반복조건)
SELECT COUNT(*) AS COUNT, GENERATION
FROM CTE
WHERE ID NOT IN (SELECT PARENT_ID FROM CTE WHERE PARENT_ID IS NOT NULL)
GROUP BY GENERATION
ORDER BY GENERATION
NOTE: 재귀함수 꼭 기억하기!22222