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

如何计算帖子的评分?基于Post与Votes表的SQL实现

计算帖子评分:好评数减差评数的SQL实现

现有两张表:

  • Post表:存储帖子ID
  • Votes表:存储POST ID(关联Post的ID)和VALUE(1代表好评,0代表差评)

需要实现的逻辑是:每个帖子的评分 = 好评数 - 差评数。

解决方案1:使用CASE表达式

通过CASE语句将投票值转换为+1(好评)或-1(差评),再求和得到评分:

SELECT 
    posts.id AS `POST ID`,
    SUM(CASE 
        WHEN votes.value = 1 THEN 1 
        WHEN votes.value = 0 THEN -1 
        ELSE 0 
    END) AS `RATING`
FROM posts
LEFT JOIN votes ON posts.id = votes.post_id
GROUP BY posts.id
ORDER BY `RATING` DESC;

解决方案2:简化数值计算

利用投票值是0或1的特性,直接通过算术转换计算:当value=1时,2*value-1=1;当value=0时,2*value-1=-1,求和结果与方案1一致。用COALESCE确保无投票的帖子评分显示为0而非NULL:

SELECT 
    posts.id AS `POST ID`,
    COALESCE(SUM(2 * votes.value - 1), 0) AS `RATING`
FROM posts
LEFT JOIN votes ON posts.id = votes.post_id
GROUP BY posts.id
ORDER BY `RATING` DESC;

结果验证

针对你提供的示例数据:

  • Post表ID=5
  • Votes表有2条value=1、1条value=0

执行上述SQL后会得到:

POST IDRATING
51

完全符合2-1=1的预期结果。

内容的提问来源于stack exchange,提问作者Рокстар Геймс

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 02:24:28