You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Stack Exchange Data Explorer(SEDE)获取问答的单独赞踩数?

获取Stack Overflow问答单独点赞/点踩数的SEDE查询方案

要获取问答的单独点赞和点踩数,需借助SEDE中的Votes表统计(Posts表仅提供净投票得分),以下是针对你的需求修改后的查询方案:

原查询存在的问题

你的原查询WHERE子句逻辑有误,OR和AND的优先级会导致筛选条件不符合预期,应将标签匹配的条件用括号包裹,确保只筛选特定标签下有已采纳回答的问题。

修改后的完整查询代码

SELECT
    -- 问题基础信息 + 单独赞踩数
    Q.Id AS QuestionId,
    Q.Title,
    Q.Tags,
    Q.Score AS QuestionNetScore,
    QStats.QuestionUpvotes,
    QStats.QuestionDownvotes,
    -- 回答基础信息 + 单独赞踩数
    A.Id AS AnswerId,
    A.Body AS AnswerBody,
    A.Score AS AnswerNetScore,
    AStats.AnswerUpvotes,
    AStats.AnswerDownvotes,
    -- 用户信息
    U.Id AS UserId,
    U.DisplayName,
    U.Reputation
FROM
    -- 筛选特定标签下有采纳回答的问题
    (SELECT *
     FROM Posts
     WHERE (Tags LIKE '%google-maps-api-3%')
       AND PostTypeId = 1  -- 1代表问题
       AND AcceptedAnswerId IS NOT NULL) AS Q
-- 关联回答表
JOIN Posts AS A ON Q.Id = A.ParentId
-- 关联用户表(回答作者)
JOIN Users AS U ON A.OwnerUserId = U.Id
-- 统计问题的赞踩数
LEFT JOIN (
    SELECT
        PostId,
        SUM(CASE WHEN VoteTypeId = 2 THEN 1 ELSE 0 END) AS QuestionUpvotes,
        SUM(CASE WHEN VoteTypeId = 3 THEN 1 ELSE 0 END) AS QuestionDownvotes
    FROM Votes
    WHERE VoteTypeId IN (2,3)
    GROUP BY PostId
) AS QStats ON Q.Id = QStats.PostId
-- 统计回答的赞踩数
LEFT JOIN (
    SELECT
        PostId,
        SUM(CASE WHEN VoteTypeId = 2 THEN 1 ELSE 0 END) AS AnswerUpvotes,
        SUM(CASE WHEN VoteTypeId = 3 THEN 1 ELSE 0 END) AS AnswerDownvotes
    FROM Votes
    WHERE VoteTypeId IN (2,3)
    GROUP BY PostId
) AS AStats ON A.Id = AStats.PostId;

关键说明

  • Votes表中VoteTypeId的含义:
    • 2:点赞(Upvote)
    • 3:点踩(Downvote)
  • 使用LEFT JOIN避免因无投票记录的问答被过滤掉
  • 分别对问题和回答的投票数据做分组统计,得到单独的赞踩数量
  • 精简了返回字段,避免冗余的全表数据(你可根据需求自行添加需要的字段)

内容的提问来源于stack exchange,提问作者Sultan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 14:22:17