개요
웹 서비스를 운영하다 보면 어느 날짜에 어떤 페이지가 몇 번 방문되었는지 통계를 내야 하는 경우가 많습니다. 이 글에서는 MySQL을 사용해 일별 · 페이지별 방문 수를 간단히 집계하는 방법을 알아봅니다.
참고: 이 문서에서는 'DBNAME'이라는 데이터베이스와, 방문 기록이 저장된 'tableName'이라는 테이블이 이미 생성되어 있다고 가정합니다.
집계 쿼리
그룹화 함수(GROUP BY)를 활용하면 다음과 같이 손쉽게 방문자 수를 계산할 수 있습니다.
SELECT DATE(date) Date, page_id, COUNT(*) colName
FROM tableName
GROUP BY DATE(date), page_id;
쿼리 구성 요소 설명
- DATE(date): datetime 타입의 값에서 날짜(연-월-일) 부분만 추출하여 일별 그룹의 기준으로 사용합니다.
- page_id: 어떤 페이지에 대한 방문인지 구분하는 컬럼입니다.
- COUNT(*): 같은 날짜·같은 페이지에 속한 레코드 수, 즉 '일별 방문 수'를 세어 결과로 반환합니다.
여기서 'colName'은 '일별 방문 수'를 담는 컬럼 이름을 의미하며, 실제 환경에서는 'visit_count'처럼 의미를 알기 쉬운 이름으로 지정하는 것이 좋습니다.
실행 결과 예시
+------------+---------+-------------+
| Date | page_id | visit_count |
+------------+---------+-------------+
| 2024-01-01 | 1 | 120 |
| 2024-01-01 | 2 | 45 |
| 2024-01-02 | 1 | 98 |
+------------+---------+-------------+
이렇게 날짜와 페이지 ID가 조합된 기준으로 데이터가 그룹화되어, 하루 동안 각 페이지가 몇 번 조회되었는지 한눈에 확인할 수 있습니다.
활용 팁
- 특정 기간의 데이터만 보고 싶다면
WHERE date BETWEEN '시작일' AND '종료일'조건을 추가하면 됩니다. - 방문 수가 많은 순서로 정렬하려면 쿼리 마지막에
ORDER BY visit_count DESC를 붙여 주세요. - 로그 성격의 테이블에는 중복 기록이 섞여 있을 수 있으므로, 필요에 따라
COUNT(DISTINCT user_id)를 사용해 고유 방문자 수(UV)를 집계할 수도 있습니다.
이처럼 GROUP BY 절에 날짜 함수와 페이지 ID를 함께 지정하면 복잡한 로직 없이도 일별 페이지 방문 통계를 간단하게 산출할 수 있습니다.