728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/59413#qna
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
해당 문제는 Recursive를 활용해서 쿼리를 푸는 문제이다.
문제에서 주의할 점
- CTE를 이용해서 재귀 테이블을 만들 수 있는가
- COUNT(*) VS COUNT(B.ANIMAL_ID)
🔴 COUNT(*)의 경우
- HH의 1시간마다 반드시 1개의 행은 생성됨
- LEFT JOIN 결과는 B.ANIMAL_ID가 NULL이어도 행이 존재하므로
- COUNT(*)는 1로 카운트해버림 → ❌ 틀린 결과
✅ COUNT(B.ANIMAL_ID의 경우
- B.ANIMAL_ID가 NULL이면 카운트되지 않음
- → 입양 기록이 없는 시간대는 정확히 0으로 집계됨
-- 코드를 입력하세요
-- ANIMAL_OUTS
WITH RECURSIVE HH AS (
SELECT 0 AS HOUR
UNION ALL
SELECT HOUR + 1 FROM HH
WHERE HOUR < 23
)
SELECT A.HOUR AS HOUR, COUNT(B.ANIMAL_ID) AS COUNT
FROM HH A
LEFT JOIN ANIMAL_OUTS B ON A.HOUR = HOUR(B.DATETIME)
GROUP BY A.HOUR
ORDER BY A.HOUR;
728x90
반응형
'알고리즘 > SQL' 카테고리의 다른 글
[SQL] 조건에 맞는 사원 정보 조회하기 (0) | 2025.05.16 |
---|---|
[SQL] 재귀 CTE(Command Table Expression)를 이용한 계층적 구조 탐색 (0) | 2025.05.09 |
[SQL] 년, 월, 성별 별 상품 구매 회원 수 구하기 (0) | 2025.05.09 |
[SQL] 저자 별 카테고리 별 매출액 집계하기 (0) | 2025.05.08 |