๐ ๋ณธ ํฌ์คํ ์์ ์ฌ์ฉ๋๋ ํ ์ด๋ธ์ ์๋ฃ์ ์ถ์ฒ๋ ํ๋ก๊ทธ๋๋จธ์ค์์ ๋ฐํ๋๋ค. ๋ ๋ค์ํ SQL ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์๋ ค๋ฉด ํ๋ก๊ทธ๋๋จธ์ค ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํด๋ณด์ธ์!
์ด๋ฒ ํฌ์คํ ์์ ์๊ฐํ SQL ๊ตฌ๋ฌธ์ ํ๋ก๊ทธ๋๋จธ์ค SQL ๊ณ ๋์ Kit์ Group by ์นดํ ๊ณ ๋ฆฌ์ ์ ์ ์๊ฐ ๊ตฌํ๊ธฐ(2) ๋ฌธ์ ํ์ด์ ์ฌ์ฉ๋ ๊ตฌ๋ฌธ์ด๋ค. ๋ฌธ์ ํ์ด์ ์ฌ์ฉ๋ ํ ์ด๋ธ๊ณผ ๋ฌธ์ ์ ๋ํ ์์ธํ ์ค๋ช ์ ํด๋น ๋ฌธ์ ์ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ์.
๋ฌธ์ ์์ ์๊ตฌํ๋ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ๋ค.
๋ณดํธ์์์๋ ๋ช ์์ ์ ์์ด ๊ฐ์ฅ ํ๋ฐํ๊ฒ ์ผ์ด๋๋์ง ์์๋ณด๋ ค ํฉ๋๋ค. 0์๋ถํฐ 23์๊น์ง, ๊ฐ ์๊ฐ๋๋ณ๋ก ์ ์์ด ๋ช ๊ฑด์ด๋ ๋ฐ์ํ๋์ง ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ์๊ฐ๋ ์์ผ๋ก ์ ๋ ฌํด์ผ ํฉ๋๋ค.
์ด ๋ ํ์ฉํ ๋ฐฉ๋ฒ์ SET ์ด๋ผ๋ ๋ฌธ๋ฒ์ ์ด์ฉํด ์๋ก์ด ๋ณ์๋ฅผ ํ ๋นํด์ฃผ๊ณ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ด์ฉํ๋ฉด ๋๋ค. SET์ด ๋ฌด์์ธ์ง, ์ ์ฌ์ฉํด์ผ ํ๋์ง๋ ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ์.
์ฐ์ ์ ์ ๋ต์ธ ์ ์ฒด SQL ๊ตฌ๋ฌธ์ ์ดํด๋ณด๊ณ ์ด๋ค ์๋ฏธ๋ฅผ ๋ด๊ณ ์๋์ง ํ๋ํ๋์ฉ ๋ฏ์ด๋ณด์.
SET @HOUR = -1;
SELECT @HOUR := @HOUR + 1 AS HOUR,
(SELECT COUNT(*)
FROM ANIMAL_OUTS
WHERE @HOUR = HOUR(DATETIME)) AS COUNT
FROM ANIMAL_OUTS
WHERE @HOUR < 23
๊ฐ์ฅ ์ค์ํ๋ค๊ณ ํ ์ ์๋ ๋ถ๋ถ์ SET์ ํ์ฉํด ์๋ก์ด ์นผ๋ผ์ ๋ง๋ค์ด์ฃผ๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ํ๋ ์ด์ ๋ ์๋ณธ ํ ์ด๋ธ์ DATETIME์ด 0์~23์๊น์ง ์ฐ์์ ์ผ๋ก ์๋ ๊ฒ์ด ์๋๋ผ ์ค๊ฐ์ ๋ช๋ช ๋น ์ ธ์๋ ์๊ฐ๋๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ๋ฌธ์ ์์ ์๊ตฌํ๋ ์ฐ์์ ์ธ [0,1,2,3, ..., 23] ์๊น์ง์ ๊ฐ์ ๋ง๋ค์ด์ฃผ์ด์ผ ํ๋ค.
๋ค์์ผ๋ก ์ํํ ๊ตฌ๋ฌธ์ ๋ณด์.
@HOUR := @HOUR + 1
์ด ๊ตฌ๋ฌธ์ ์ง๊ด์ ์ผ๋ก ์ดํดํ๊ธฐ ์ํด Python ๋ฌธ๋ฒ์ ์๋ฅผ ๋ค์ด ๋ณธ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ ์๊ฒ ๋ค.
cnt = 0
for n in range(0,10):
print(n, end=' ')
๊ทธ๋์ ๋ง์ฝ ๋ค์๊ณผ ๊ฐ์ SQL ๊ตฌ๋ฌธ์ ์คํํ๊ฒ ๋๋ค๋ฉด ANIMAL_OUTS ๋ผ๋ ํ ์ด๋ธ์ ํ ๊ฐ์(N๊ฐ)๋งํผ HOUR ๊ฐ์ด [0, 1, 2, 3, ... , N-1] ๋ก ์ด N๊ฐ์ ๊ฐ์ด ์ถ๋ ฅ๋ ๊ฒ์ด๋ค.
SET @HOUR = -1;
SELECT @HOUR := @HOUR + 1 AS HOUR
FROM ANIMAL_OUTS
์ด์ ์ด๋ ๊ฒ SET์ ์ด์ฉํด ์๋กญ๊ฒ ๋ง๋ HOUR์ด๋ผ๋ ๋ณ์์ ANIMAL_OUTS์ DATETIME ๋ณ์์ ์๊ฐ(HOUR)๊ณผ ๋์ผํ ๊ฐ์ ๊ฐ๋ ๋ฐ์ดํฐ๋ฅผ COUNT ํ๊ฒ ๋๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
SET @HOUR = -1;
SELECT @HOUR := @HOUR + 1 AS HOUR,
(SELECT COUNT(*)
FROM ANIMAL_OUTS
WHERE @HOUR = HOUR(DATETIME))
FROM ANIMAL_OUTS
๋ง์ง๋ง์ผ๋ก 0์ ~ 23์๊น์ง์ ๋ฐ์ดํฐ๋ง ์ถ๋ ฅํด์ผ ํ๊ธฐ ๋๋ฌธ์ WHERE ์กฐ๊ฑด๋ฌธ์ ์ถ๊ฐํด์ฃผ์.
SET @HOUR = -1;
SELECT @HOUR := @HOUR + 1 AS HOUR,
(SELECT COUNT(*)
FROM ANIMAL_OUTS
WHERE @HOUR = HOUR(DATETIME))
FROM ANIMAL_OUTS
WHERE @HOUR < 23
ํ ๊ฐ์ง ์ฃผ์ํด์ผ ํ ์ ์ ๋ง์ง๋ง WHERE ์ ์์ '@HOUR' ์ ์ฌ์ฉํ๋ค๋ ์ ์ด๋ค. ๊ทธ๋ฅ 'HOUR' ์ ์ฌ์ฉํ๋ฉด ์๋ ๊น? ์ ๋๋ค. ์๋ํ๋ฉด 'HOUR' ์ด๋ผ๋ ๋ณ์๋ SELECT ์ ์์ ์๋กญ๊ฒ ๋ง๋ค์ด์ง ์๋ก์ด ์นผ๋ผ๋ณ์์ด๊ธฐ ๋๋ฌธ์ด๋ค.(์ด๋ฌํ ์ฃผ์ ์ฌํญ์ ๊ธฐ์ตํ๊ณ ์์ผ๋ฉด ๋ค๋ฅธ ๋ฌธ์ ํ์ด์ ๋ง์ ๋์์ด ๋๋ค.)
๊ทธ๋์ '@HOUR' ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ '23์ ๊น์ง'์ ๊ฐ์ ์ถ๋ ฅํ๊ธฐ ์ํด '@HOUR < 23'์ด ๋๋ค. ์๋ํ๋ฉด '@HOUR' ์ '@HOUR + 1'๋ก ์ฌํ ๋น ๋์๊ธฐ ๋๋ฌธ์ด๋ค.
@HOUR := @HOUR + 1
'SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SQL] MySQL - Window Function์ผ๋ก ๋ฌธ์ ํ๊ธฐ(Leetcode - 180, 184, 185๋ฒ) (0) | 2021.01.30 |
---|---|
[SQL] MySQL - ๋๋ง์ Function ๋ง๋ค๊ธฐ(Leetcode - 177๋ฒ) (0) | 2021.01.29 |
[SQL] - Delete, Update๋ฌธ ์ฌ์ฉํ๊ธฐ(Leetcode - 196, 627๋ฒ) (0) | 2021.01.27 |
[SQL] MySQL - ORDER BY ์ IN ํจ๊ป ์ฌ์ฉํ๊ธฐ (0) | 2021.01.26 |
[SQL] MySQL - ALL ์ฌ์ฉ๋ฒ (0) | 2021.01.25 |