728x90
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
재귀를 이용해서.. 증가하는 배열을 하나 만들어준 뒤, 테이블 크기만큼만 돌아서 0으로 전부 설정되어있는 cnt테이블을 만들었다.
그리고 자식의 수를 카운팅한 배열 AA와 LEFT JOIN 해주는 방식으로 풀었다.
WITH RECURSIVE cnt AS(
SELECT 1 AS ID, 0 AS CHILD_COUNT
UNION ALL
SELECT ID+1 AS ID, 0 AS CHILD_COUNT
FROM cnt
WHERE ID < (SELECT COUNT(*) FROM ECOLI_DATA)
), AA AS(
SELECT PARENT_ID, COUNT(*) AS CHILD_COUNT
FROM ECOLI_DATA
GROUP BY PARENT_ID
HAVING PARENT_ID IS NOT NULL
)
SELECT B.ID, CASE WHEN A.CHILD_COUNT IS NULL THEN 0 ELSE A.CHILD_COUNT END AS CHILD_COUNT
FROM AA A RIGHT JOIN cnt B ON A.PARENT_ID = B.ID;
가독성 좋은 코드로 개선
SELECT PARENT.ID, COUNT(CHILD.PARENT_ID) AS CHILD_COUNT
FROM ECOLI_DATA PARENT LEFT JOIN ECOLI_DATA CHILD
ON PARENT.ID = CHILD.PARENT_ID
GROUP BY PARENT.ID
ORDER BY PARENT.ID;728x90
'코테 > SQL' 카테고리의 다른 글
| [Programmers] 물고기 종류 별 잡은 수 구하기 (MySQL) (0) | 2024.04.15 |
|---|---|
| [Programmers] 월별 잡은 물고기 수 구하기 (MySQL) (0) | 2024.04.14 |
| [Programmers] 물고기 종류 별 대어 찾기 (MYSQL) (0) | 2024.03.21 |
| [Programmers] 부서별 평균 연봉 조회하기 (MYSQL) (1) | 2024.03.20 |
| [Leetcode] SQL50 문제 (MYSQL) (0) | 2024.02.08 |