대시보드 보고서 - 주제

이것은 토픽 대시보드 보고서의 SQL 버전입니다.

이 보고서는 지정된 날짜 범위 내에서 매일 생성된 새로운 토픽 수를 제공합니다. 이 보고서는 개인 메시지는 포함하지 않으며, 포럼에서 표시되는 일반 토픽만 포함합니다.

--[params]
-- date :start_date
-- date :end_date

SELECT 
     p.created_at::date as day,
    COUNT(p.id) AS topics_created
FROM posts p
INNER JOIN topics t ON t.id = p.topic_id AND t.deleted_at ISNULL
WHERE p.created_at::date BETWEEN :start_date AND :end_date
    AND p.post_number = 1
    AND p.user_id > 0 
    AND p.deleted_at ISNULL
    AND t.archetype = 'regular'
GROUP BY p.created_at::date
ORDER BY p.created_at::date ASC

SQL 쿼리 설명

해당 SQL 쿼리는 다음과 같은 작업을 수행합니다:

  • 파라미터 정의: :start_date와 :end_date라는 두 개의 파라미터를 받아 보고서의 날짜 범위를 정의합니다. 두 날짜 파라미터 모두 YYYY-MM-DD 형식을 사용합니다.
  • 데이터 선택: 쿼리는 게시물의 생성 날짜(p.created_at)와 게시물 ID의 개수(COUNT(p.id))를 topics_created로 선택합니다.
  • 조인(Joins): posts 테이블을 topics 테이블과 각자의 id 필드를 기준으로 조인하며, 삭제되지 않은 토픽(t.deleted_at ISNULL)만 고려되도록 합니다.
  • 필터링: 쿼리는 다음 조건을 만족하는 게시물만 포함하도록 필터링합니다:
    • 지정된 날짜 범위 내에서 생성된 게시물(p.created_at::date BETWEEN :start_date AND :end_date).
    • 토픽의 첫 번째 게시물(p.post_number = 1)로, 이는 새로운 토픽의 시작을 나타냅니다.
    • 등록된 사용자에 의해 생성된 게시물(p.user_id > 0)로, 시스템 게시물을 제외합니다.
    • 삭제되지 않은 게시물(p.deleted_at ISNULL).
    • ‘regular’ 아키타입의 토픽에 속하는 게시물(t.archetype = 'regular')로, 개인 메시지를 제외합니다.
  • 그룹핑: 결과는 게시물의 생성 날짜(p.created_at::date) 기준으로 그룹화됩니다.
  • 정렬: 최종 출력은 생성 날짜 오름차순으로 정렬(ORDER BY p.created_at::date ASC)되어, 새로운 토픽 생성의 시간적 흐름을 보여줍니다.

결과 예시

day topics_created
2023-11-11 18
2023-11-12 10
2023-11-13 21
2023-11-14 19
2023-11-15 22
… …
4개의 좋아요