노아
[프로그래머스] 입양 시각 구하기(2) 본문
Question
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
Pseudocode
- 재귀 CTE 정의:
- WITH RECURSIVE 구문을 사용하여 time이라는 재귀 CTE를 생성합니다.
- 처음에는 0으로 시작하고, 시간(hour)이 23이 될 때까지 1씩 증가하며 재귀적으로 시간을 생성합니다.
- 서브쿼리:
- ANIMAL_OUTS 테이블에서 DATETIME 컬럼의 시간 부분을 추출하여 hour로 변환합니다.
- 이 서브쿼리는 동물의 퇴출 시간이 포함된 결과를 제공합니다.
- 시간을 기준으로 조인:
- 재귀적으로 생성된 time CTE와 ANIMAL_OUTS 데이터를 시간(hour)을 기준으로 왼쪽 조인을 합니다.
- time CTE는 0부터 23까지의 시간을 포함하므로 모든 시간이 보장됩니다.
- 그룹화 및 집계:
- hour로 그룹화하고, 각 시간대별로 animal_id의 개수를 계산합니다.
- 정렬:
- 결과는 시간(hour)을 기준으로 오름차순 정렬됩니다.
Code
with recursive time
as (
select 0 as hour
union all
select hour + 1
from time
where hour < 23
)
select t.hour, count(animal_id)
from time t left join (
select *, hour(DATETIME) hour
from ANIMAL_OUTS
) o on t.hour = o.hour
group by t.hour
order by t.hour
'알고리즘 > SQL' 카테고리의 다른 글
[프로그래머스] 조건에 맞는 개발자 찾기 (0) | 2024.09.20 |
---|---|
[프로그래머스] 특정 세대의 대장균 찾기 (0) | 2024.09.20 |
[프로그래머스] 업그레이드 된 아이템 구하기 (0) | 2024.09.20 |
[프로그래머스] 물고기 종류 별 대어 찾기 (0) | 2024.09.20 |
[프로그래머스] 오프라인/온라인 판매 데이터 통합하기 (0) | 2024.09.20 |