728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/59413#qna
- 몇 시에 입양이 가장 활발하게 일어나는지 알아보기
- 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성
- 결과는 시간대 순 정렬
테이블
ANIMAL_OUTS |
풀이과정
# 문제가 되는 지점
- HOUR(DATETIME) 한 결과 → 7시 ~ 19시 사이의 시간만 출력됨
- 문제에서 요구하는 결과 → 0시 ~ 23시 사이의 시간이 모두 출력되는 것
- 즉, 데이터가 없는 0시~6시 및 20~23시도 HOUR 컬럼에 나오게 하고,
해당 시간에 대한 입양 수는 0으로 출력되게 만들어야 하는 것!
- 즉, 데이터가 없는 0시~6시 및 20~23시도 HOUR 컬럼에 나오게 하고,
# 재귀쿼리 만들기 (RECURSIVE)
1 2 3 4 5 6 | WITH RECURSIVE H AS( SELECT 0 AS HOUR UNION ALL SELECT HOUR + 1 FROM H WHERE HOUR < 23) | cs |
# ANIMAL_OUTS 테이블과 LEFT JOIN
- 재귀 테이블 H에 ANIMAL_OUTS 테이블을 LEFT JOIN
- 재귀 테이블에서 만든 HOUR로 그룹화 해준 뒤 COUNT(A.ANIMAL_ID) 해주기
- 여기에 정렬 조건만 주면 끝!
# 정답
1 2 3 4 5 | SELECT H.HOUR, COUNT(A.ANIMAL_ID) AS COUNT -- COUNT(A.DATETIME)도 됨 FROM H LEFT JOIN ANIMAL_OUTS A ON HOUR(A.DATETIME) = H.HOUR GROUP BY H.HOUR ORDER BY H.HOUR | cs |
728x90
'코딩테스트 > SQL 코드카타' 카테고리의 다른 글
MySQL 프로그래머스 | 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (2) | 2024.09.25 |
---|---|
MySQL 프로그래머스 | 식품분류별 가장 비싼 식품의 정보 조회하기 (2) | 2024.09.24 |
MySQL 프로그래머스 | FrontEnd 개발자 찾기 (비트 연산자로 조인하기) (0) | 2024.09.20 |
MySQL 프로그래머스 | 상품을 구매한 회원 비율 구하기 (2) | 2024.09.19 |
MySQL 프로그래머스 | 그룹별 조건에 맞는 식당 목록 출력하기 (1) | 2024.09.18 |
댓글