如何在MySQL中将两次关联查询合并为单条查询?
合并两次MySQL查询的解决方案
你可以通过两种简洁的方式将这两次查询合并为一条,完美得到你想要的统计结果:
方法一:使用IN子查询
直接把第一个查询的结果作为外层查询的过滤条件,语法直观易懂:
SELECT COUNT(ID) AS `COUNT`, COL2 FROM TABLE1 WHERE COL1 IN (SELECT COL1 FROM TABLE1 WHERE COL2 = 'Item_2' GROUP BY COL1) GROUP BY COL2 ORDER BY `COUNT` DESC LIMIT 5;
原理说明:
- 内层子查询先筛选出所有包含
Item_2的COL1值(也就是10和11); - 外层查询只统计这些
COL1对应的行数据; - 最后按统计数量降序排序,取前5条结果,正好匹配你的预期输出。
方法二:使用JOIN关联(性能更优)
如果你的数据表数据量较大,用JOIN的方式通常会有更好的查询性能,这里用DISTINCT替代子查询里的GROUP BY(效果一致,都是获取唯一的COL1值):
SELECT COUNT(t1.ID) AS `COUNT`, t1.COL2 FROM TABLE1 t1 JOIN (SELECT DISTINCT COL1 FROM TABLE1 WHERE COL2 = 'Item_2') t2 ON t1.COL1 = t2.COL1 GROUP BY t1.COL2 ORDER BY `COUNT` DESC LIMIT 5;
原理说明:
- 子查询生成一个仅包含符合条件
COL1值的临时表; - 通过JOIN操作关联原表,只保留临时表中存在
COL1的行; - 后续的统计、排序和限制操作和方法一一致。
两种方法最终都会返回你期望的结果:
2 Item_2
1 Item_1
1 Item_3
1 Item_4
内容的提问来源于stack exchange,提问作者Aleksa Ristic
相关产品推荐
相关产品推荐

