문제
코딩테스트 연습 - 입양 시각 구하기(2) | 프로그래머스 스쿨
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다.
0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요.
이때 결과는 시간대 순으로 정렬해야 합니다.
풀이
- 0시부터 23시 까지 필터
- 전체 카운트
- 시간 기준 정렬
- 데이터에 07시 부터 19시 까지의 데이터만 존재함을 확인
- 0부터 23시까지의 테이블을 생성 후 조인으로 해결
- 이때 없는 데이터의 전체 카운트시 0을 반환하도록 함
코드
RECURSIVE CTE 즉 재귀적 CTE를 생성.
이는 FOR문 처럼 반복수행 하면서 행을 만드는 것이다.
초기의 쿼리, UNION ALL, 재귀쿼리로 이루어져
초기의 쿼리를 기본 결과 집합으로, 재귀 쿼리를 기반으로 반복적인 행을 생성한다.
밑은 초기 쿼리를 HOUR 0으로 설정해두면, 재귀 쿼리를 이용하여
0부터 23까지의 HOUR테이블을 생성하게 된다.
WITH RECURSIVE HOURS(HOUR) AS (
SELECT 0
UNION ALL
SELECT HOUR + 1
FROM HOURS
WHERE HOUR < 23)
SELECT H.HOUR AS HOUR, IFNULL(COUNT(A.DATETIME),0) AS COUNT
FROM HOURS H
LEFT JOIN ANIMAL_OUTS A
ON H.HOUR = DATE_FORMAT(A.DATETIME,'%H')
GROUP BY H.HOUR
ORDER BY H.HOUR ASC
링크
Programmers/프로그래머스/4/59413. 입양 시각 구하기(2) at main · K-MarkLee/Programmers
Programmers/프로그래머스/4/59413. 입양 시각 구하기(2) at main · K-MarkLee/Programmers
This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - K-MarkLee/Programmers
github.com
끝
'Daily 코드카타 > SQL' 카테고리의 다른 글
코딩테스트 SQL 코드카타 (기록 별 대여 금액 구하기) (2) | 2024.11.08 |
---|---|
코딩테스트 SQL 코드카타 (1) | 2024.11.07 |
코딩테스트 SQL 코드카타 (중고거래 댓글 조회하기) (0) | 2024.11.05 |
코딩테스트 SQL 코드카타 () (0) | 2024.11.04 |
코딩테스트 SQL 코드카타 (저자 별 카테고리 별 매출액 집계) (0) | 2024.11.01 |