You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:02:05