SQL/[개념 및 문법]
[SQL] Recursive 표현으로 쿼리 만들기
hyunnn_00
2023. 4. 12. 13:18
잘못된 풀이
SELECT EXTRACT(hour FROM datetime) AS hour
, COUNT(*) AS count
FROM animal_outs
GROUP BY hour
ORDER BY hour
시간대를 출력해서 개수를 세었더니 0시부터 23시까지 hour 컬럼이 생성되는 것이 아니라 hour이 있는 컬럼만 생성되었다.
정답 풀이
0시부터 24시까지 hour 컬럼 만들기
- recusrcive 쿼리(파이썬의 for문과 비슷)
-- with 테이블로 임시 테이블 생성
WITH RECURSIVE time AS (# 재귀쿼리 세팅
SELECT 0 AS hour # 초기값 설정
UNION ALL # 위의 쿼리와 아래의 쿼리 값을 연산
SELECT hour+1 FROM time # 1씩 증가시킴
WHERE hour < 23 # 반복 멈추는 용도
)
SELECT time.hour
, COUNT(hour(ao.datetime)) AS count
FROM time
LEFT JOIN animal_outs ao ON time.hour = hour(ao.datetime)
GROUP BY time.hour # 안해주면 count가 전체 count가 됨
1. 임시테이블을 만들어 24시까지 1시간 간격의 테이블 생성
2. 원본 테이블과 left join하여 time테이블의 hour과 원본테이블의 hour이 일치하게 join
3. time.hour로 group by 해주기
sql에서도 for문과 비슷한 쿼리가 있는 줄 몰랐다. 앞으로 더 열심히 공부해야겠다.