일자별 클릭 수 리포트는 실무에서 매우 자주 사용됩니다.
이 포스팅에서는 MySQL(MariaDB)과 Oracle(티베로) 환경에서 날짜 형식을 처리하고, GROUP BY
로 일자별로 데이터를 집계하는 기본 쿼리를 예시와 함께 설명합니다.
일자별 리포트가 필요한 이유
- 클릭 트렌드 분석, 마케팅 캠페인 효과 측정, 유입 타이밍 분석 등에서 날짜 단위 집계는 필수입니다.
- 특히 대시보드나 월간 리포트에서 일별 클릭 수는 기본 지표로 활용됩니다.
- 일자별 클릭 수 리포트는 방문자 수와 더해져서 클릭률(CTR)을 알 수 있습니다.
MySQL / MariaDB 쿼리 예시
예제 테이블(click_actions)을 이용해서 예시 쿼리를 알려 드리겠습니다.
SELECT
DATE(created_at) AS click_date,
COUNT(*) AS click_cnt
FROM click_actions
GROUP BY DATE(created_at)
ORDER BY click_date ASC;
SQL설명
DATE(created_at)
을 사용해 날짜만 추출합니다(YYYY-MM-DD)
.- 간단하게 일자별 클릭 수를 집계할 수 있습니다.
- 인덱스가 있을 경우,
DATE(created_at)
이 성능에 영향을 줄 수 있으니 주의!
일자별 리포트에서 날짜를 추출하는 GROUP BY가 포인트입니다.
Oracle / 티베로 쿼리 예시
예제 테이블(click_actions)을 이용해서 예시 쿼리를 알려 드리겠습니다.
SELECT
TO_CHAR(created_at, 'YYYY-MM-DD') AS click_date,
COUNT(*) AS click_cnt
FROM click_actions
GROUP BY TO_CHAR(created_at, 'YYYY-MM-DD')
ORDER BY click_date ASC;
SQL설명
- Oracle에서는
TO_CHAR
로 날짜 형식을 문자로 변환해GROUP BY
합니다. - 날짜 포맷은
'YYYY-MM-DD'
로 일 단위 집계가 가능하도록 지정합니다. - Mysql 다른 부분은 날짜 형식을 사용할 때 TO_CHAR을 사용합니다.
날짜 필터 조건 추가
-- MySQL 예시
WHERE created_at BETWEEN '2025-07-01' AND '2025-07-31'
-- Oracle 예시
WHERE created_at BETWEEN TO_DATE('2025-07-01', 'YYYY-MM-DD') AND TO_DATE('2025-07-31', 'YYYY-MM-DD')
SQL📌 성능 최적화를 위해
created_at
컬럼에 인덱스가 존재하면 서브쿼리 대신 WHERE 절에서 날짜 범위를 먼저 필터링하는 방식이 더 효율적입니다.
날짜 기준 집계 시 주의할 점
- 날짜에 시간이 포함되어 있으면, 정확한 집계가 불가능하므로 시간 부분은 잘라내세요.
DATE()
또는TO_CHAR()
사용 시, 인덱스를 타지 않아 성능 저하 가능성이 있습니다.- 시각화나 리포트와 연동할 때 날짜 포맷을 일관되게 유지하는 것이 좋습니다.
마무리 및 다음 예고
일자별 클릭 수 리포트는 대시보드, 보고서, 알림 시스템 등에서 가장 많이 쓰이는 패턴 중 하나입니다.
다음 글에서는 카테고리별 클릭 수 집계나 누적 클릭 수 쿼리 등 더욱 복합적인 리포트를 소개할 예정입니다.
- 👉 관련 포스팅 : 클릭 조회 수 집계 SQL 쿼리|서브쿼리 vs JOIN 방식 비교