如何计算帖子的评分?基于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 ID | RATING |
|---|---|
| 5 | 1 |
完全符合2-1=1的预期结果。
内容的提问来源于stack exchange,提问作者Рокстар Геймс
相关产品推荐
相关产品推荐

