웹사이트나 앱의 운영에서 사용자의 방문 시간대별 통계를 파악하는 것은 중요합니다. 이를 통해 사용자의 활동 패턴을 이해하고, 서비스의 효율적인 운영이 가능합니다. MYSQL에서는 쿼리문을 활용하여 간단하게 이러한 통계를 구할 수 있습니다.

0~23까지의 시간 배열 생성하기
우선적으로 0~23시까지의 시간대를 나타내는 배열을 생성합니다. DUAL을 사용하여 순차적으로 증가하는 값을 만들어냅니다.
SELECT @N := @N +1 AS n
from visitorTable, (select @N:=-1 from DUAL ) NN
LIMIT 24
시간대별 방문 통계 구하기
앞의 글에서 사용했던 시간대별 방문 통계를 구합니다.
SELECT HOUR(vdate) AS hh, COUNT(vdate) AS cnt
FROM visitorTable
WHERE vdate BETWEEN '2021-01-01 00:00:00' AND DATE_FORMAT(now(), '%Y-%m-%d 23:59:59')
GROUP BY hh
ORDER BY hh ASC
두 쿼리문 합치기
위에서 생성한 시간대 배열과 방문 통계를 JOIN하여 최종 결과를 얻습니다.
SELECT *
FROM
(SELECT @N := @N +1 AS n
from visitorTable, (select @N:=-1 from DUAL ) NN
LIMIT 24) AS T
left JOIN
(SELECT HOUR(vdate) AS hh, COUNT(vdate) AS cnt
FROM visitorTable
WHERE vdate BETWEEN DATE_FORMAT(now(), '%Y-%m-%d 00:00:00') AND DATE_FORMAT(now(), '%Y-%m-%d 23:59:59')
GROUP BY hh) AS dayT
ON T.n = dayT.hh
그러면 결과는 다음 표와 같이 나옵니다.
| n | hh | cnt |
| 0 | (NULL) | (NULL) |
| 1 | (NULL) | (NULL) |
| 2 | (NULL) | (NULL) |
| 3 | (NULL) | (NULL) |
| 4 | 4 | 56 |
| 5 | (NULL) | (NULL) |
| 6 | (NULL) | (NULL) |
| 7 | (NULL) | (NULL) |
| 8 | (NULL) | (NULL) |
| 9 | (NULL) | (NULL) |
| 10 | (NULL) | (NULL) |
| 11 | (NULL) | (NULL) |
| 12 | (NULL) | (NULL) |
| 13 | (NULL) | (NULL) |
| 14 | (NULL) | (NULL) |
| 15 | 15 | 76 |
| 16 | 16 | 34 |
| 17 | 17 | 123 |
| 18 | 18 | 54 |
| 19 | 19 | 34 |
| 20 | 20 | 21 |
| 21 | (NULL) | (NULL) |
| 22 | (NULL) | (NULL) |
| 23 | (NULL) | (NULL) |
NULL 값 처리하기
결과에서 방문자가 없는 시간대는 NULL로 표시됩니다. 이를 IFNULL 함수를 사용하여 0으로 바꿀 수 있습니다.
결론
MYSQL 쿼리문을 활용하면 원하는 시간대별 방문 통계를 간단하게 구할 수 있습니다. 특히 여러 테이블 혹은 배열과의 JOIN을 통해 보다 구체적이고 효율적인 분석 데이터를 얻을 수 있습니다. 이를 통해 서비스 운영에 있어 중요한 인사이트를 얻을 수 있습니다.
'Language > SQL' 카테고리의 다른 글
| [MySQL] 쿼리문 동작을 보다 쉽게 보기 위한 HeidiSQL(하이디SQL) (0) | 2021.02.18 |
|---|---|
| [MYSQL] DATE_FORMAT을 이용한 날짜 형식 변환하기 (0) | 2021.02.09 |
| [MYSQL] 시간대별 방문자 통계 구하기 (0) | 2021.02.04 |
| [MYSQL] 다중테이블 JOIN문 쓰기 (0) | 2021.01.12 |
| [MYSQL] 테이블을 limit 만큼 검색(select)하여 join으로 해당 테이블 합치기 (장바구니) (0) | 2021.01.05 |