이것은 쿼리를 작성할 때 더 정확한 결과를 얻을 수 있도록 도와주는 Discourse 데이터의 몇 가지 특이한 점에 대한 좋은 예시입니다.
대부분의 게시물과 주제는 삭제 시 '소프트 삭제’되므로 데이터베이스에 여전히 남아 있으며 커스텀 보고서 통계에 포함될 수 있습니다. 따라서 사용자나 카테고리 통계와 같이 가져오려는 결과에서 이러한 항목을 필터링하여 제외하는 것이 도움이 될 수 있습니다. 비슷한 방식으로, 개인 메시지와 시스템 사용자도 통계에서 제외하는 것이 좋습니다.
이러한 항목을 필터링하는 방법에 대한 몇 가지 팁은 다음과 같습니다:
이 SQL 쿼리는 시스템 사용자를 제외하고 가장 많은 공개 게시물을 작성한 상위 10명의 사용자를 가져오기 위해 사용됩니다. 삭제된 게시물 또는 삭제된 주제에 속하는 게시물은 제외됩니다.
-- posts 테이블에서 user_id를 선택하고 각 사용자가 작성한 게시물 수를 카운트합니다
SELECT
p.user_id,
COUNT(p.id) AS "Post Count"
FROM posts p
-- topic_id 기준으로 topics 테이블과 Left join 수행
LEFT JOIN topics t ON t.id = p.topic_id
WHERE
-- 개인 메시지 주제 제외
t.archetype <> 'private_message'
-- 삭제된 주제 제외
AND t.deleted_at ISNULL
-- 삭제된 게시물 제외
AND p.deleted_at ISNULL
-- 속삭임(whispers), 작은 액션 게시물, 관리자 게시물 제외
AND p.post_type = 1
-- 시스템 사용자 및 discobot(user_id 0과 -1)이 작성한 게시물 제외
AND p.user_id > 0
-- 결과를 user_id 기준으로 그룹화
GROUP BY 1
-- 결과를 게시물 수 기준으로 내림차순 정렬
ORDER BY 2 DESC
-- 게시물 수가 가장 많은 상위 10명의 사용자로 결과 제한
LIMIT 10
인라인 주석 없이 작성된 버전은 다음과 같습니다:
SELECT
p.user_id,
COUNT(p.id) AS "Post Count"
FROM posts p
LEFT JOIN topics t ON t.id = p.topic_id
WHERE t.archetype <> 'private_message'
AND t.deleted_at ISNULL
AND p.deleted_at ISNULL
AND p.post_type = 1
AND p.user_id > 0
GROUP BY 1
ORDER BY 2 DESC
LIMIT 10
이것은 예시를 보여주기 위한 단순한 쿼리일 뿐이지만, 데이터 탐색기를 시작하는 데 도움이 되기를 바랍니다.
질문이 있다면 아래에 남겨주세요. ![]()