출처: https://astrocosmos.tistory.com/202 [ASTROCOSMOS:티스토리] 프로그래머스_Lv4_특정 세대의 대장균 찾기 :: 하나둘셋넷
728x90

특정 세대의 대장균 찾기

출처 : 프로그래머스 https://school.programmers.co.kr/learn/courses/30/lessons/301650

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

데이터 준비

-- 데이터베이스 생성 --
create database if not exists programmers_test
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;

-- 테이블 생성 --
CREATE TABLE IF NOT EXISTS ECOLI_DATA(
	ID int not null,
    PARENT_ID int,
    SIZE_OF_COLONY int not null,
    DIFFERENTIATION_DATE date not null,
    GENOTYPE int not null
);

-- 데이터 삽입 --
INSERT INTO ECOLI_DATA VALUES (1,NULL,10,'2019/01/01',5);
INSERT INTO ECOLI_DATA VALUES (2,NULL,2,'2019/01/01',3);
INSERT INTO ECOLI_DATA VALUES (3,1,100,'2020/01/01',4);
INSERT INTO ECOLI_DATA VALUES (4,2,16,'2020/01/01',4);
INSERT INTO ECOLI_DATA VALUES (5,2,17,'2020/01/01',6);
INSERT INTO ECOLI_DATA VALUES (6,4,101,'2021/01/01',22);
INSERT INTO ECOLI_DATA VALUES (7,3,101,'2022/01/01',23);
INSERT INTO ECOLI_DATA VALUES (8,6,1,'2022/01/01',27);

 

풀이

SELECT `origin`.ID
FROM ECOLI_DATA `origin`
WHERE `origin`.PARENT_ID IN -- 2세대 ID를 찾는다, 부모 ID가 1세대 ID인 데이터
(SELECT first.ID FROM -- 1세대 ID를 찾는다.
(
WITH parent_gen as -- 0세대 ID를 찾는다.
(SELECT ID FROM ECOLI_DATA
WHERE PARENT_ID IS NULL)
SELECT `first_gen`.`ID` 
FROM ECOLI_DATA `first_gen`
WHERE `first_gen`.PARENT_ID IN -- 부모 ID가 0세대 ID인 데이터는 1세대 데이터
	( SELECT * FROM parent_gen)  
) `first`
)
ORDER BY `origin`.ID ASC;

 

728x90

+ Recent posts