https://school.programmers.co.kr/questions/39492
해당 해설이 좋아서 공유!!!!
나는 그냥 이렇게 했는데
select date_format(datetime, '%H') AS HOUR, HOUR(DATETIME) AS HOUR2,COUNT(*) AS CNT
FROM ANIMAL_OUTS
GROUP BY HOUR
HAVING HOUR BETWEEN 0 AND 23
ORDER BY HOUR
아래 정답을 내신 고수는
WITH문을 써서 서브쿼리 2개를 수행!!!
RECURSIVE는 처음 보는 구문이다!!!!!!
WITH RECURSIVE tb1 AS (
SELECT 0 AS HOUR
UNION ALL
SELECT HOUR+1 FROM tb1 WHERE HOUR < 23
) , tb2 AS (
SELECT HOUR(DATETIME) AS HOUR
, COUNT(DISTINCT ANIMAL_ID) AS CNT
FROM ANIMAL_OUTS
GROUP BY HOUR
)
SELECT tb1.HOUR
, CASE WHEN tb2.CNT IS NULL THEN 0 ELSE CNT END AS CNT
FROM tb1
LEFT JOIN tb2 ON tb1.HOUR = tb2.HOUR
ORDER BY HOUR
'「SQL초급떼기' 카테고리의 다른 글
코딩테스트 연습String, Date조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (0) | 2023.04.02 |
---|---|
코딩테스트 연습GROUP BY대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) | 2023.04.02 |
코딩테스트 연습GROUP BY입양 시각 구하기(1) (0) | 2023.04.02 |
코딩테스트 연습GROUP BY가격대 별 상품 개수 구하기 (0) | 2023.04.02 |
코딩테스트 연습GROUP BY년, 월, 성별 별 상품 구매 회원 수 구하기 (0) | 2023.04.02 |
댓글