๋ฐฉ๋ฒ 1
SELECT Hour(access_date) AS hh , count(access_date) AS cnt
FROM access_log
WHERE access_date BETWEEN '2022-01-01 00:00:00' AND date_format(now(),'%Y-%m-%d 23:59:59')
GROUP BY hh
ORDER BY hh ASC;
- access_date ์์ Hour() ๋ก ์๊ฐ๊ฐ(0,1,2,3...) ๋ง ๊ฐ์ ธ์จ ๋ค
- ๊ทธ ๊ฐ์ GROUP BY ๋ฅผ ํตํด ์ค๋ณต ์ ๊ฑฐ์ ํจ๊ป count ๊ฐ์ ๊ตฌํ๋ค
- BETWEEN AND ์ ๋ก ๊ตฌํ๊ณ ์ ํ๋ ๊ธฐ๊ฐ์ ์ง์ ํ๋ค
์ถ๋ ฅ
์์ ๊ฐ์ ๋ฐฉ๋ฒ์ ๊ฐ์ด ์๋ ์๊ฐ๋ง ์ถ๋ ฅ์ ํ๋ค.
๊ฐ์ ์ ๋ฌด์ ์๊ด์์ด 1~24 ์๊ฐ๋๋ณ ๋ฐฉ๋ฌธ ํต๊ณ๊ฐ ํ์ํ๋ค.
๋ฐฉ๋ฒ 2
์ฐ์ ํ๋ฒํธ๋ ์๊ฐ ๋ฑ ์์ฐจ์ ์ผ๋ก ์ซ์๋ฅผ ์ถ๋ ฅํด์ฃผ๋ ํ ์ด๋ธ์ด ํ์ํ๋ค.
SELECT @N := @N +1 AS n
FROM access_log , (select @N:=0 from DUAL ) NN
LIMIT 24;
- SELECT @๋ณ์์ด๋ฆ := ๋์ ๊ฐ;
- ๋ณ์ N ์ ์ธ ๋ฐ 0 ์ผ๋ก ์ด๊ธฐํ ํ ํ
- 0๋ถํฐ 1์ฉ ์ฆ๊ฐํ์ฌ ์ต๋ 24๊น์ง ์ถ๋ ฅํ๋ค
์ถ๋ ฅ
-1 ๋ก ์ด๊ธฐํ๋ฅผ ํ๋ฉด 0๋ถํฐ 23๊น์ง ์ถ๋ ฅ๋๋๋ก ํ ์ ์๋ค. Hour ๋ก ์๊ฐ์ ๊ตฌํ ๊ฒฝ์ฐ 24์๋ 0 ์๋ก ํ์๋๊ธฐ ๋๋ฌธ์ -1 ๋ก ์ด๊ธฐํ ํด์ผํ๋ค.
์ด์ ์ด ํ ์ด๋ธ์ ๋ฐฉ๋ฌธ ํต๊ณ ํ ์ด๋ธ๊ณผ ์กฐ์ธํ๋ฉด ๋๋ค.
SELECT A.n AS h , ifnull(B.cnt,0) AS cnt
FROM
(SELECT @N := @N +1 AS n
FROM access_log, (select @N:=-1 from DUAL ) NN
LIMIT 24) AS A
LEFT JOIN
(SELECT HOUR(access_date) AS hh, COUNT(access_date) AS cnt
FROM access_log
WHERE access_date BETWEEN '2022-01-01 00:00:00' AND date_format(now(),'%Y-%m-%d 23:59:59')
GROUP BY hh) AS B
ON A.n = B.hh ;
- ๊ฐ์ด ์๋ ์ปฌ๋ผ์ ifnull ์ํตํด 0 ์ผ๋ก ์ฒ๋ฆฌํด์ฃผ์๋ค
์ด์ 0~23 ์๊ฐ ๋ณ๋ก ์ ์ ํต๊ณ ๊ฐ์ ๊ตฌํ ์ ์๊ฒ ๋์๋ค.
์ฐธ์กฐ
[MYSQL] ์ฟผ๋ฆฌ๋ฌธ์ ์ด์ฉํ ๋งค์๊ฐ๋๋ณ ๋ฐฉ๋ฌธ ํต๊ณ ๊ตฌํ๊ธฐ
๋ฐ์ํ
๋๊ธ