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

MySQL表中UpVote与DownVote差值统计的SQL语法求助

解决StackOverflow风格的投票得分统计问题

嘿,你的思路其实已经走对一半啦!要实现类似StackOverflow的「赞数减踩数」得分统计,只需要在你现有的SQL基础上,加上对DownVote列的统计,然后做减法就行。

核心思路

StackOverflow的得分逻辑很简单:总赞数 - 总踩数。我们需要分别统计upVote为true的行数,和DownVote为true的行数,然后用前者减去后者得到最终得分。

完整SQL实现(两种写法)

写法一:分开统计赞数和踩数再相减

这种写法逻辑清晰,容易理解:

SELECT 
  -- 统计总赞数,没有数据时返回0
  COALESCE(SUM(CASE WHEN upVote THEN 1 ELSE 0 END), 0) - 
  -- 统计总踩数,没有数据时返回0
  COALESCE(SUM(CASE WHEN DownVote THEN 1 ELSE 0 END), 0) AS totalScore
FROM Ratings 
WHERE TopicID = :topicsID;

写法二:单步计算每行的贡献

这种写法更简洁,直接对每一行计算得分贡献(赞+1,踩-1,无投票则0),然后求和:

SELECT 
  COALESCE(SUM(
    CASE 
      WHEN upVote THEN 1 
      WHEN DownVote THEN -1 
      ELSE 0 
    END
  ), 0) AS totalScore
FROM Ratings 
WHERE TopicID = :topicsID;

关键细节说明

  • CASE WHEN:用来把布尔值(true/0)转换成我们需要的数值(1或-1),方便求和计算。
  • COALESCE:确保当没有匹配的投票数据时,结果返回0而不是NULL,避免出现奇怪的空值问题。
  • AS totalScore:给计算结果起一个可读性强的别名,方便后续业务代码调用。

这两种写法都能完美实现你想要的效果,选哪种全看你觉得哪种更直观~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:18:07