๋ฌธ์ ์ค๋ช
ANIMAL_OUTS ํ ์ด๋ธ์ ๋๋ฌผ ๋ณดํธ์์์ ์ ์ ๋ณด๋ธ ๋๋ฌผ์ ์ ๋ณด๋ฅผ ๋ด์ ํ ์ด๋ธ์ ๋๋ค. ANIMAL_OUTS ํ ์ด๋ธ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME๋ ๊ฐ๊ฐ ๋๋ฌผ์ ์์ด๋, ์๋ฌผ ์ข , ์ ์์ผ, ์ด๋ฆ, ์ฑ๋ณ ๋ฐ ์ค์ฑํ ์ฌ๋ถ๋ฅผ ๋ํ๋ ๋๋ค.
๋ณดํธ์์์๋ ๋ช ์์ ์ ์์ด ๊ฐ์ฅ ํ๋ฐํ๊ฒ ์ผ์ด๋๋์ง ์์๋ณด๋ ค ํฉ๋๋ค. 0์๋ถํฐ 23์๊น์ง, ๊ฐ ์๊ฐ๋๋ณ๋ก ์ ์์ด ๋ช ๊ฑด์ด๋ ๋ฐ์ํ๋์ง ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ์๊ฐ๋ ์์ผ๋ก ์ ๋ ฌํด์ผ ํฉ๋๋ค.
์์
SQL๋ฌธ์ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋์์ผ ํฉ๋๋ค.
๋์ ํ์ด
-- ์ฝ๋๋ฅผ ์
๋ ฅํ์ธ์
WITH RECURSIVE BASE AS (
SELECT 0 AS HOUR
UNION ALL
SELECT HOUR+1 FROM BASE
WHERE HOUR < 23
)
SELECT HOUR AS HOUR, COUNT(ANIMAL_ID) AS COUNT FROM BASE LEFT JOIN ANIMAL_OUTS ON BASE.HOUR = HOUR(ANIMAL_OUTS.DATETIME) GROUP BY HOUR ORDER BY HOUR;
WITH RECURSIVE ๊ฐ ์ค์ํ๋ฐ, ํด๋น ๋ฌธ๋ฒ์ ์ฌ๊ท๋ฅผ ์๋ฏธํ๋ค.
์ฆ ๊ฐ์ด 0์ธ ์ปฌ๋ผ๊ณผ 0 ~ 22 ๊น์ง ๋ฐ๋ณตํ๋ฉฐ ์ปฌ๋ผ ์ด๋ฆ์ n+1 ๋ก ๊ฐ๋ ํ ์ด๋ธ์ ์์ฑํ๋ค.
๊ทธ ํ LEFT JOIN์ผ๋ก ์กฐํํ๋ฉด ๋