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

多表统计总数:如何合并3张工单表的状态统计结果?

合并三张工单表统计各状态总数的SQL方案

我来帮你搞定这个多表统计的问题~这里有两种常用的修改方案,你可以根据自己的需求选择:

方案一:合并表后统一统计(推荐)

这种方法先把三张表的状态数据合并成一个临时数据集,再一次性统计各状态的总数,代码更简洁,执行效率也更高(只需要扫描每张表一次)。

SELECT
  SUM(CASE WHEN status = 9 THEN 1 ELSE 0 END) AS done,
  SUM(CASE WHEN status = 10 THEN 1 ELSE 0 END) AS Incomplete,
  SUM(CASE WHEN status = 2 THEN 1 ELSE 0 END) AS New
FROM (
  -- 合并三张表的status字段,UNION ALL不会去重,适合工单数据无重复的场景
  SELECT status FROM ticket1
  UNION ALL
  SELECT status FROM ticket2
  UNION ALL
  SELECT status FROM ticket3
) AS combined_tickets;

为什么用UNION ALL而不是UNION?

UNION会自动去重合并结果,但工单表的数据应该是独立的(比如不同时间段的工单),不需要去重,UNION ALL的执行速度会更快,也能保留所有原始数据。

方案二:基于原查询修改(易理解)

如果你想沿用原来的子查询思路,只需要把每个状态的统计改成三张表的统计数相加即可,逻辑直观,但表数量多的时候代码会比较冗余。

SELECT
  -- 三个表中status=9的总数相加
  (SELECT COUNT(*) FROM ticket1 WHERE status =9) + 
  (SELECT COUNT(*) FROM ticket2 WHERE status =9) + 
  (SELECT COUNT(*) FROM ticket3 WHERE status =9) AS done,
  -- 同理统计status=10的总数
  (SELECT COUNT(*) FROM ticket1 WHERE status =10) + 
  (SELECT COUNT(*) FROM ticket2 WHERE status =10) + 
  (SELECT COUNT(*) FROM ticket3 WHERE status =10) AS Incomplete,
  -- 统计status=2的总数
  (SELECT COUNT(*) FROM ticket1 WHERE status =2) + 
  (SELECT COUNT(*) FROM ticket2 WHERE status =2) + 
  (SELECT COUNT(*) FROM ticket3 WHERE status =2) AS New;

一般更推荐方案一,尤其是后续可能增加更多工单表的时候,维护起来更方便~

内容的提问来源于stack exchange,提问作者Lutfi Aldi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:24:29