태그를 포함한 주제별 투표 요약

특정 카테고리의 모든 주제와 각 주제의 투표 수를 확인할 수 있는 Data Explorer 쿼리가 있으면 좋겠습니다. SQL 쿼리에 익숙하지 않아서, 제가 수정해서 사용할 수 있을 정도로 비슷한 기존 쿼리를 찾지 못했습니다.

이상적으로는 아래와 같은 형태였으면 합니다:

topic votes replies tags closed
예제 주제 1 85 62 web, ios, android FALSE
예제 주제 2 79 45 web TRUE

혹시 이 부분에 대해 도움을 주실 수 있나요? 잘못된 곳에 질문을 올린 것 같으면 죄송합니다. 가장 가까운 기존 주제라고 생각해서 여기에 올렸습니다.

안녕하세요, @CarrieSeltzer :slight_smile:

이런 방식으로 괜찮으시나요?

-- [params]
-- int :category_id 

WITH tag_names AS (
    SELECT t.id topic_id,
    string_agg(tags.name, ', ' ORDER BY tags.name) AS "tags"
    FROM topics t
    JOIN topic_tags tt ON tt.topic_id = t.id
    JOIN tags ON tags.id = tt.tag_id
    GROUP BY t.id
)

SELECT t.created_at::date,
       dvtvc.topic_id,
       votes_count,
       t.posts_count,
       tn.tags,
       t.closed
FROM discourse_voting_topic_vote_count dvtvc
JOIN topics t ON t.id = dvtvc.topic_id
LEFT JOIN tag_names tn ON dvtvc.topic_id = tn.topic_id
WHERE t.category_id = :category_id
AND votes_count > 0
ORDER BY t.created_at DESC

네, 감사합니다! 정말 좋습니다! 한 가지 작은 수정이 필요해요. CSV 내보내기에서 주제 ID만 표시되는 것이 아니라 주제 이름도 함께 표시되도록 하는 방법이 있을까요?

SELECT에 t.title을 추가하면 해당 항목이 포함될 것 같습니다:

-- [params]
-- int :category_id 

WITH tag_names AS (
    SELECT t.id topic_id,
    string_agg(tags.name, ', ' ORDER BY tags.name) AS "tags"
    FROM topics t
    JOIN topic_tags tt ON tt.topic_id = t.id
    JOIN tags ON tags.id = tt.tag_id
    GROUP BY t.id
)

SELECT t.created_at::date,
       dvtvc.topic_id,
       t.title,
       votes_count,
       t.posts_count,
       tn.tags,
       t.closed
FROM discourse_voting_topic_vote_count dvtvc
JOIN topics t ON t.id = dvtvc.topic_id
LEFT JOIN tag_names tn ON dvtvc.topic_id = tn.topic_id
WHERE t.category_id = :category_id
AND votes_count > 0
ORDER BY t.created_at DESC

원하시면 다음을 사용하여 내보내기 파일에 해당 토픽으로 이동하는 링크도 포함할 수 있습니다:

'https://meta.discourse.org/t/' || t.slug || '/' || t.id AS topic_url,

이걸 물어보는 게 좀 부끄럽지만, 솔직히 위 코드에 이 부분을 어디에 추가해야 하는지 도저히 모르겠습니다. 어디에 넣어야 하나요?

괜찮아요. :slight_smile: 여기 이 부분에 넣으면 됩니다: (Meta 대신 본인 사이트 주소로만 변경하세요)

-- [params]
-- int :category_id 

WITH tag_names AS (
    SELECT t.id topic_id,
    string_agg(tags.name, ', ' ORDER BY tags.name) AS "tags"
    FROM topics t
    JOIN topic_tags tt ON tt.topic_id = t.id
    JOIN tags ON tags.id = tt.tag_id
    GROUP BY t.id
)

SELECT t.created_at::date,
       dvtvc.topic_id,
       t.title,
       'https://meta.discourse.org/t/' || t.slug || '/' || 
       t.id AS topic_url,
       votes_count,
       t.posts_count,
       tn.tags,
       t.closed
FROM discourse_voting_topic_vote_count dvtvc
JOIN topics t ON t.id = dvtvc.topic_id
LEFT JOIN tag_names tn ON dvtvc.topic_id = tn.topic_id
WHERE t.category_id = :category_id
AND votes_count > 0
ORDER BY t.created_at DESC