이 SQL 쿼리는 Discourse AI - AI triage 자동화 기능에 의해 보고된 스팸 플래그에 대한 통계를 제공합니다. 총 플래그 수, 승인 또는 거부된 플래그 수, 그리고 이에 해당하는 백분율을 계산합니다. 이 보고서는 포럼에서 자동 스팸 탐지가 얼마나 효과적인지 이해하는 데 유용합니다.
-- [params]
-- date :start_date = 2025-01-01
-- date :end_date = 2025-05-30
SELECT
COUNT(*) AS total_flags,
COUNT(*) FILTER (WHERE r.status = 1) AS approved_flags,
COUNT(*) FILTER (WHERE r.status = 2) AS rejected_flags,
ROUND(100.0 * COUNT(*) FILTER (WHERE r.status = 1) / COUNT(*), 2) AS approved_percentage,
ROUND(100.0 * COUNT(*) FILTER (WHERE r.status = 2) / COUNT(*), 2) AS rejected_percentage
FROM
reviewables r
JOIN
post_actions pa ON pa.post_id = r.target_id AND r.target_type = 'Post'
WHERE
pa.post_action_type_id = 8 -- ID for spam (Flag as spam and hide post)
AND r.created_at BETWEEN :start_date AND :end_date
AND r.status IN (1, 2) -- Accepted and rejected flags
AND r.created_by_id = -1 -- System user ID
SQL 쿼리 설명
- 매개변수: 기본값이 포함된
YYYY-MM-DD형식의:start_date및:end_date매개변수. - 조인:
reviewables테이블을post_actions테이블과 연결하여 검토 과정을 거친 스팸 플래그만 집계되도록 합니다. - 필터링:
post_action_type_id = 8: 스팸 플래그로만 제한합니다.- 지정된 매개변수를 사용하여 날짜 범위 필터링을 수행합니다.
status IN (1, 2): 해결된(승인 또는 거부된) 플래그만 포함합니다.created_by_id = -1: 시스템 사용자(AI 트리아지)에 의해 생성된 플래그만 포함합니다.
- 집계:
total_flags: 시스템에 의해 생성된 스팸 플래그의 총 수.approved_flags: 스태프 사용자가 승인한 플래그 수(status = 1).rejected_flags: 스태프 사용자가 거부한 플래그 수(status = 2).approved_percentage: 승인된 플래그의 백분율.rejected_percentage: 거부된 플래그의 백분율.
결과 예시
| total_flags | approved_flags | rejected_flags | approved_percentage | rejected_percentage |
|---|---|---|---|---|
| 152 | 128 | 24 | 84.21 | 15.79 |