프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
대장균 개체의 ID(ID)와 자식의 수(CHILD_COUNT)를 출력하는 SQL 문을 작성해주세요. 자식이 없다면 자식의 수는 0으로 출력해주세요. 이때 결과는 개체의 ID 에 대해 오름차순 정렬해주세요.
-- S: ID, CHILD_COUNT
-- F: ECOLI_DATA
-- O: ID ASC
SELECT ED.ID, IFNULL(PT.CHILD_COUNT,0) AS CHILD_COUNT
FROM ECOLI_DATA ED LEFT JOIN
(SELECT PARENT_ID AS ID, COUNT(ID) AS CHILD_COUNT
FROM ECOLI_DATA
WHERE PARENT_ID IS NOT NULL
GROUP BY PARENT_ID) PT ON ED.ID = PT.ID
ORDER BY ID
NOTE: 재귀 써야하는 줄 알고 뇌정지 왔으나... 서브쿼리+조인으로 해결 가능
2. 대장균의 크기에 따라 분류하기 1(Level 3)
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
대장균 개체의 크기가 100 이하라면 'LOW', 100 초과 1000 이하라면 'MEDIUM', 1000 초과라면 'HIGH' 라고 분류합니다. 대장균 개체의 ID(ID) 와 분류(SIZE)를 출력하는 SQL 문을 작성해주세요.이때 결과는 개체의 ID 에 대해 오름차순 정렬해주세요.
-- S: ID, SIZE
-- F: ECOLI_DATA
-- C: 100이하 'LOW', 100초과 1000이하 'MEDIUM', 1000초과 'HIGH'
-- O: ID ASC
SELECT ID,
(CASE WHEN SIZE_OF_COLONY <= 100 THEN 'LOW'
WHEN SIZE_OF_COLONY > 100 AND SIZE_OF_COLONY <= 1000 THEN 'MEDIUM'
ELSE 'HIGH' END) AS SIZE
FROM ECOLI_DATA
ORDER BY ID
3. 대장균의 크기에 따라 분류하기 2(Level 3)
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
대장균 개체의 크기를 내름차순으로 정렬했을 때 상위 0% ~ 25% 를 'CRITICAL', 26% ~ 50% 를 'HIGH', 51% ~ 75% 를 'MEDIUM', 76% ~ 100% 를 'LOW' 라고 분류합니다. 대장균 개체의 ID(ID) 와 분류된 이름(COLONY_NAME)을 출력하는 SQL 문을 작성해주세요. 이때 결과는 개체의 ID 에 대해 오름차순 정렬해주세요 . 단, 총 데이터의 수는 4의 배수이며 같은 사이즈의 대장균 개체가 서로 다른 이름으로 분류되는 경우는 없습니다.
-- S: ID, COLONY_NAME
-- F: ECOLI_DATA
-- C: 0~25% 'CRITICAL', 26~50% 'HIGH', 51~75% 'MEDIUM', 76~100% 'LOW'
-- O: ID ASC
SELECT ID, (CASE
WHEN PR <= 25 THEN 'CRITICAL'
WHEN PR <= 50 THEN 'HIGH'
WHEN PR <= 75 THEN 'MEDIUM'
ELSE 'LOW' END) AS COLONY_NAME
FROM
(SELECT ID, PERCENT_RANK() OVER (ORDER BY SIZE_OF_COLONY DESC) * 100 AS PR
FROM ECOLI_DATA) RANK_TABLE
ORDER BY ID
NOTE: 범위설정 애매할 경우 처리방법 + PERCENT_RANK() 함수 잘 기억