如何在 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 中对两个结果集中的列求和的主要内容,如果未能解决你的问题,请参考以下文章