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

Posted

技术标签:

【中文标题】如何在 MySQL 中对两个结果集中的列求和【英文标题】:How to Sum Columns From Two Result Sets in MySQL 【发布时间】:2009-01-28 20:12:38 【问题描述】:

我有下表:

评分:

ID | post_id | rating_type

rating_type 字段为“thumb-up”或“thumb-down”。我想得到一个结果集,告诉我评价最高的帖子是什么。以下查询为我提供了一个结果集,其中包含每个唯一 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 小时以来,我一直在与文档和 Google 碰撞,所以我希望 SO 可以成为我的救星。

【问题讨论】:

【参考方案1】:
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)而不是字符串。

【讨论】:

正是我需要的。非常感谢!【参考方案2】:

最初,为什么不直接将竖起大拇指存储为 1,将大拇指向下存储为 -1? Quassnoi 的案例陈述更快......

【讨论】:

我更愿意这样做,但规范要求对星级评分系统进行可能的扩展,但不要花费太多时间。您做出妥协的模糊要求之一,你知道吗?

以上是关于如何在 MySQL 中对两个结果集中的列求和的主要内容,如果未能解决你的问题,请参考以下文章

在 oracle 中对具有空值的列求和

在 MySql 中对 UNION 的结果求和的简单方法

如何在codeigniter中对数据表求和

在 CTE 中对日期范围内的列求和?

将结果集中的列结果转置为行

使用mysql_fetch_row()函数逐行获取结果集中的每条记录