mysql - 用算术组合两个 SQL 语句(本身不是连接)

标签 mysql select

我有一个插件,可以计算我网站上评论的有用票数(“有帮助”、“有趣”、“酷”,它还提供了添加其他描述符的选项。所以我添加了“无帮助” .

现在,我正在尝试自定义用于显示得票最多的评论的查询,方法是考虑“无帮助”投票(从有帮助的投票中减去它们),而不是仅仅计算所有投票的总数。

所以最初用于此的查询是:

SELECT review_id, COUNT(*) AS count FROM `wp_reviews_ratings` GROUP BY review_id ORDER BY count DESC LIMIT 5

而且我发现我可以计算有用的投票(其中“评分”列中的数字为 0、1 或 2),如下所示:

SELECT review_id, COUNT(*) AS count FROM `wp_reviews_ratings` where `rate` <3 GROUP BY review_id ORDER BY count DESC LIMIT 5

我可以计算无帮助的投票(其中“比率”列中的数字为 3),如下所示:

SELECT review_id, COUNT(*) AS count FROM `wp_reviews_ratings` where `rate` >2 GROUP BY review_id ORDER BY count DESC LIMIT 5

但我不知道如何组合这两个 select 语句,以便前 5 个“计数”结果显示每个查询的计数差异。

我不需要并集,因为没有进行减法,并且我尝试了多个选择的各种排列,但无法解决这个问题。

有什么建议吗?

示例表:Example Table

在上面的例子中,如果所有投票都是盲目计算的,则评论 #4 的排名高于评论 #10,但如果考虑到无用的投票,则 #10 的排名会比评论高,净总数为 1 #4 的净总数为 0。

有道理吗?

最佳答案

试试这个:

select a.review_id,b.review_id,a.count,b.count from
(SELECT review_id, COUNT(*) AS count FROM `wp_reviews_ratings` where `rate` <3 GROUP BY review_id ORDER BY count DESC LIMIT 5) as a
left join
(SELECT review_id, COUNT(*) AS count FROM `wp_reviews_ratings` where `rate` >2 GROUP BY review_id ORDER BY count DESC LIMIT 5) as b
on a.review_id = b.review_id

如果第一个查询的 review_id = 第二个查询的 review_id,则此操作有效,否则您也可以使用 <> 来两者

其他选项使用union all

SELECT review_id, COUNT(*) AS count FROM `wp_reviews_ratings` where `rate` <3 GROUP BY review_id ORDER BY count DESC LIMIT 5
union all
SELECT review_id, COUNT(*) AS count FROM `wp_reviews_ratings` where `rate` >2 GROUP BY review_id ORDER BY count DESC LIMIT 5

关于mysql - 用算术组合两个 SQL 语句(本身不是连接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44401500/

相关文章:

php - 从应用程序登录的最佳方式

generics - 在 .NET Core 中使用字段名动态构建 IQueryable Select 子句

SQL 在另一个查询中使用 UNION 查询的结果

mysql - 返回尚未关注(或查看)的最受关注用户

oracle - oracle 中的求和值

mysql - SQL 获取指定列表的第一个

java - 当我使用移动数据时,imageview 不会更新,但当使用 wifi 时,它会更新

mysql - 从列具有特定文本的表中选择列的总和

mysql - 0、NULL、空字符串、默认值 - MySql 问题

php - 无法访问我的本地托管网站的管理仪表板