如何用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
相关产品推荐
相关产品推荐

