sql - 如何在 MySQL 中对两个结果集中的列求和

标签 sql mysql database

我有下表:

评分:

ID | post_id | rating_type

rating_type 字段是“赞成”或“反对”。我想得到一个结果集,告诉我评分最高的帖子是什么。以下查询为我提供了一个结果集,其中包含每个唯一 post_id 的赞成票数。

SELECT COUNT(post_id) as number_up, post_id FROM wp_sp_post_ratings WHERE rating_type = 'thumb-up' GROUP BY post_id

太好了!我可以为大拇指向下评级类型做类似的事情。但是,我需要的是获得总评分,其中每个大拇指向上给一个帖子一分,每个大拇指向下给一个帖子负分。然后,我需要按总评级来排序。所以,假设我们有以下内容:

帖子 1 有 3 个赞成票和 2 个反对票 帖子 2 有 14 票赞成票和 33 票反对票 帖子 3 有 4 票赞成票和 0 票反对票

我希望看到如下结果集:

post_id | total_rating
3 | 4
1 | 1
2 | -19

我不知道该怎么做。我已经将我的头撞到文档和谷歌上大约 2 个小时了,所以我希望 SO 可以成为我的救世主。

最佳答案

SELECT SUM(CASE WHEN rating_type = 'up' THEN 1 WHEN rating_type = 'down' THEN -1 END CASE)
FROM posts
GROUP BY post_id

P. S. 最好将赞成票和反对票保留为数字(+1 和 -1)而不是字符串。

关于sql - 如何在 MySQL 中对两个结果集中的列求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/489116/

相关文章:

sql - Sequelize findOrCreate 插入新行但返回主键 undefined object

教程中的 MySQL SQL 查询问题

c# - 如何对将项目添加到数据库的方法进行单元测试?

MySQL 数据库,带有用户创建的带有自定义列号的表

php - 使用数据库中同一表中的另一列(ID 号)更改上传文件的名称

mysql - 在 1 个查询 : 2 results, 中使用 2 个条件

php - 过滤 gridview 后的 Yii2 导出

java - 如何将带有 Case 语句的 Sql orderby 子句转换为 JOOQ?

mysql - 如何在 MySQL 中执行动态 UNION 查询?

PHP/MySQL 日期/时间差异