๐ข ๋ณธ ํฌ์คํ ์ ํ์ฉ๋๋ ๊ธฐ๋ณธ ๋ฌธ์ ๋ฐ ์๋ฃ ์ถ์ฒ๋
ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉ ํ ์คํธ ์ฐ์ต, https://school.programmers.co.kr/learn/challenges ์์ ๋ฐํ๋๋ค.
์ ์ฝ๋ฉํ ์คํธ ์ฐ์ต์ ๊ณต๊ฐ๋ ๋ฌธ์ ๋ (์ฃผ)๊ทธ๋ ์ด ์ ์๊ถ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
โ ๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/59413
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
โ ํ์ด
WITH RECURSIVE cte AS (
SELECT 0 AS n
UNION ALL
SELECT n + 1 FROM cte WHERE n < 23
)
SELECT cte.n, SUM(CASE WHEN HOUR(OUTS.DATETIME)=cte.n THEN 1 ELSE 0 END) AS COUNT
FROM cte cte
LEFT JOIN ANIMAL_OUTS OUTS
ON cte.n = HOUR(OUTS.DATETIME)
GROUP BY 1;
๋ฌธ์ ์๊ตฌ์ฌํญ
๋ณดํธ์์์๋ ๋ช ์์ ์ ์์ด ๊ฐ์ฅ ํ๋ฐํ๊ฒ ์ผ์ด๋๋์ง ์์๋ณด๋ ค ํฉ๋๋ค.
> DATETIME ์๊ฐ๋ง ์ถ์ถํด์ ์๊ฐ๋๋ก ๊ทธ๋ฃนํ ํ๋ฉด ๋๊ฒ ๋ค.
0์๋ถํฐ 23์๊น์ง, ๊ฐ ์๊ฐ๋๋ณ๋ก ์ ์์ด ๋ช ๊ฑด์ด๋ ๋ฐ์ํ๋์ง ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
> (๋ฌธ์ ) HOUR(DATETIME)์ ๋ฒ์๊ฐ 0-23์๊น์ง๊ฐ ์๋์ฌ์
์๊ฐ๋์ ๋น ์๊ฐ๋์๋ ์ ์๋ ๋๋ฌผ์ด ์์ ์ ๋ํ ์๋ก์ด ROW ์์ฑ์ด ํ์ํ๋ค.
(ํ์ดํ ๋ฐฉ๋ฒ)
> 0๋ถํฐ 23๊น์ง ์ฐ์์ ์ผ๋ก ์ ์๊ฐ ์ถ๋ ฅ๋๋ ํ ์ด๋ธ cte๋ฅผ ์ฌ๊ท ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ๋ง๋ค๊ณ WITH์
์ ์์๊ฐ๋๋ฅผ cte์ ์๊ฐ๋(0~23)์ปฌ๋ผ๊ณผ ์กฐ์ธํด์ ์ ์๋๋ฌผ์ด ์๋ ์๊ฐ๋๋ 1, ์๋ ์๊ฐ๋๋ 0
์๊ฐ๋(0~23)๋ณ ๊ทธ๋ฃนํํด์ ์
์๋๋ฌผ์ ํฉ์ ์ถ๋ ฅํ๋ค.
(CASE๋ฌธ์ผ๋ก ์
์๋๋ฌผ์ด ์๋ ์๊ฐ๋๋ 0์ผ๋ก ์ง์ ํ์ผ๋ฏ๋ก ๊ทธ๋ฃนํํ์ฌ ์ง๊ณํ ํ์๋ 0์ผ๋ก ์ถ๋ ฅ๋๋ค.
์ด๋ ๊ฒฐ๊ณผ๋ ์๊ฐ๋ ์์ผ๋ก ์ ๋ ฌํด์ผ ํฉ๋๋ค.
> ORDER BY์ ์ ์ ์ฉ
WITH์ WITH์ ๋ก ์ฐ์ํ๋ ์ซ์ ์ถ๋ ฅํ๊ธฐ
WITH RECURSIVE test as
(
SELECT 0 AS num
UNION ALL
SELECT num+1
FROM test
WHERE num < ์ง์ ์ซ์
)
SELECT num as N
FROM test;
0์ num ์ผ๋ก ์ง์ ํด์ ์ถ๋ ฅํ๊ณ
num๋ถํฐ ์ฐจ๋ก๋๋ก 1์ฉ ๋ํด์
where์ ์ ์ง์ ์ซ์ ๋ฒ์๊น์ง ์ถ๋ ฅํ๋ ํ ์ด๋ธ๊ณผ union all๋ก ๋ฌถ์ด with์ ๋ก test๋ฅผ ์์ฑ.
test์์ num์ ์ถ๋ ฅํ๋ฉด ๊ธฐ์กด์ ๋ง๋ค์ด์ง 0 ~ ์ง์ ์ซ์๊น์ง ์ฐ์์ ์ธ ์ซ์๊ฐ ํ์ผ๋ก ์ถ๋ ฅ๋๋ค.
'Growth ๐ณ > Practice ๐ป' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[LeetCode] 262. Trips and Users (0) | 2022.08.26 |
---|---|
[Programmers] ์ฐ์ ์ ์๊ฑฐํธ๊ฐ ๋ด๊ธด ์ฅ๋ฐ๊ตฌ๋ (0) | 2022.08.25 |
[LeetCode] 184. Department Highest Salary (0) | 2022.08.25 |
[Programmers] ์ค๋ ๊ธฐ๊ฐ ๋ณดํธํ ๋๋ฌผ(2) (1) | 2022.08.25 |
[Programmers] ์ค์ฑํ ์ฌ๋ถ ํ์ ํ๊ธฐ (0) | 2022.08.25 |