이것은 사용자 프로필 조회 대시보드 리포트의 SQL 버전입니다.
이 대시보드 리포트는 지정된 날짜 범위 내에서 하루당 사용자 프로필 조회 총수에 대한 통계를 생성합니다.
-- [params]
-- date :start_date = 2024-01-05
-- date :end_date = 2024-02-06
WITH profile_views_per_day AS (
SELECT
date_trunc('day', viewed_at) AS day,
COUNT(*) AS views
FROM user_profile_views
WHERE viewed_at >= :start_date AND viewed_at <= :end_date
GROUP BY day
)
SELECT
day::date,
views
FROM profile_views_per_day
ORDER BY day
SQL 쿼리 설명
쿼리가 작동하는 방식에 대한 세부 설명은 다음과 같습니다:
- 파라미터: 이 쿼리는 리포트의 날짜 범위를 지정할 수 있도록
:start_date와:end_date라는 두 개의 파라미터를 받습니다. 두 날짜 파라미터 모두YYYY-MM-DD형식의 날짜를 받습니다. - 공용 테이블 표현식 (CTE): 쿼리는
profile_views_per_day라는 이름의 CTE로 시작합니다. 이는 메인 쿼리에서 사용할 임시 결과 집합입니다. - 날짜 절단 (Date Truncation): CTE 내부에서
date_trunc함수를 사용하여viewed_at타임스탬프를 날짜 단위로 절단합니다. 이는 프로필이 조회된 시각에 관계없이 날짜 기준으로만 집계됨을 의미합니다. - 조회 수 카운팅:
COUNT(*)함수는 하루 단위의 프로필 조회 수를 계산합니다. - 날짜 범위별 필터링:
WHERE절은 쿼리 상단에 설정된:start_date와:end_date파라미터 사이에 발생한 조회만 포함하도록 카운트를 제한합니다. - 결과 그룹화:
GROUP BY절은 절단된 날짜별로 결과를 그룹화하여 하루 단위로 조회 수가 집계되도록 합니다. - 결과 선택: 메인
SELECT문은 CTE에서 결과를 가져옵니다. 절단된 날짜(날짜 유형으로 캐스트됨)와 해당 날짜의 조회 수를 선택합니다. - 결과 정렬: 마지막으로
ORDER BY절은 날짜 기준으로 결과를 시간순으로 정렬하여 표시합니다.
결과 예시
| day | views |
|---|---|
| 2024-01-05 | 263 |
| 2024-01-06 | 374 |
| 2024-01-07 | 272 |
| 2024-01-08 | 409 |
| 2024-01-09 | 606 |