MySQL 8.0.12下用UNION子查询优化查询并计算两表行数差
构造UNION ALL子查询实现行数差值计算
假设你有两张包含c1字段的表(比如table_a和table_b),需求是计算每个c1在table_a中的行数与table_b中的行数差值(即c2 = 表A行数 - 表B行数),可以用以下SQL实现:
SELECT c1, SUM(row_count) AS c2 FROM ( -- 统计table_a中每个c1的行数,记为正值 SELECT c1, COUNT(*) AS row_count FROM table_a GROUP BY c1 UNION ALL -- 统计table_b中每个c1的行数,记为负值 SELECT c1, -COUNT(*) AS row_count FROM table_b GROUP BY c1 ) AS union_subquery GROUP BY c1 ORDER BY c1 DESC;
逻辑说明
- 子查询通过
UNION ALL合并两张表的分组统计结果:table_a的计数保留正值,table_b的计数取负值 - 外层查询对合并后的结果按
c1分组求和,得到的就是两张表的行数差值 ORDER BY可根据你的需求调整排序方式
如果你的表结构或字段名不同,只需替换table_a、table_b和对应的字段名即可。执行这个查询后,就能得到你期望的c2列数值(比如18182对应的167就是该c1在表A比表B多167行)。
内容的提问来源于stack exchange,提问作者George A. Custer
相关产品推荐
相关产品推荐

