대시보드 보고서 - 사용자 프로필 조회

이것은 사용자 프로필 조회 대시보드 리포트의 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
2개의 좋아요