우당탕탕 개발일지
[SQL] 프로그래머스 Select : 특정 세대의 대장균 찾기 (level 4) 본문
💡문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/301650
💡SQL 코드 설계
1. parent_id가 null인 레코드만 모아 first_gen을 만든다.
2. join 함수를 이용하여 parent_id가 first_gen.id와 같은 레코드만을 모아 second_gen을 만든다.
3. join 함수를 이용하여 parent_id가 second_gen.id와 같은 레코드만을 모아 출력한다.
💡SQL 코드
-- 코드를 작성해주세요
with first_gen as (
select id
from ecoli_data
where parent_id is null
),
second_gen as (
select ecoli_data.id, ecoli_data.parent_id
from ecoli_data
join first_gen on ecoli_data.parent_id = first_gen.id
)
select ecoli_data.id
from ecoli_data
join second_gen on ecoli_data.parent_id = second_gen.id
💡오답 풀이
처음에는 case when ~~~ then ~~~ end as ~~~ 문 쓰면 되는줄 알았다.
parent_id가 null이면 first_generation이라는 별명을 붙여주고,
parent_id의 parent_id가 null이면 second_generation이라는 별명을 붙여주고.
근데 parent_id의 parent_id가 null인지를 어떻게 파악할지 몰라서 막혀있다가 결국 구글링했는데
내가 써본 적 없는 with문을 사용해야 한다.
WITH CTE_NAME AS (
-- 여기에는 CTE로 정의할 하위 쿼리가 들어갑니다.
SELECT column1, column2, ...
FROM table_name
WHERE conditions
)
-- 메인 쿼리에서 CTE를 사용합니다.
SELECT column1, column2, ...
FROM CTE_NAME
WHERE conditions;
이렇게 해서 계층형 쿼리를 작성하는데 사용되는 with!
'SQL' 카테고리의 다른 글
[SQL] 프로그래머스 GROUP BY: 조건에 맞는 사원 정보 조회하기 (level 2) (0) | 2024.06.29 |
---|---|
[SQL] 프로그래머스 JOIN: 5월 식품들의 총매출 조회하기 (level 4) (0) | 2024.06.24 |
[SQL] 프로그래머스 SELECT : 특정 물고기를 잡은 총 수 구하기 (level 2) (0) | 2024.03.26 |
[SQL] 프로그래머스 GROUP BY: 특정 조건을 만족하는 물고기별 수와 최대 길이 구하기 (level 3) (0) | 2024.03.23 |
[SQL] 프로그래머스 SUM, MAX, MIN : 잡은 물고기 중 가장 큰 물고기의 길이 구하기 (level 1) (0) | 2024.03.23 |