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

MySQL汇总查询返回重复值,求各区域工单部分计数方法

解决工单区域部分计数的报表问题

嘿,我来帮你搞定这个区域工单计数的问题!首先,我先基于这类场景的常见数据模型来梳理解决方案——通常会有三个核心表:

  • tickets:工单表,包含工单ID、发起工单的workstation_id等核心字段
  • workstations:工作站表,记录每个工作站的ID、名称等信息
  • workstation_region_links:工作站与区域的关联表,用来绑定一个工作站对应的多个区域ID

我猜你现在的查询大概是直接按区域分组统计所有关联工单,比如这样:

SELECT r.region_name, COUNT(t.ticket_id) AS total_tickets
FROM tickets t
JOIN workstation_region_links wl ON t.workstation_id = wl.workstation_id
JOIN regions r ON wl.region_id = r.region_id
GROUP BY r.region_name;

这个查询会把同一个工单(因为所属工作站关联多个区域)重复统计到多个区域中,导致得到的是绝对总计数,而不是你想要的每个区域对应的工作站发起工单的“部分计数”。

下面分两种最常见的需求给出针对性解决方案:

需求1:拆解区域总计数,查看每个区域下各工作站的工单数量

如果你的目标是要看到每个区域的总计数是由哪些工作站贡献的(也就是区域的“部分计数”),那只需要在分组时加上工作站维度,把统计粒度细化到区域+工作站:

SELECT 
  r.region_name,
  w.workstation_name,
  COUNT(t.ticket_id) AS ticket_count
FROM tickets t
JOIN workstations w ON t.workstation_id = w.workstation_id
JOIN workstation_region_links wl ON w.workstation_id = wl.workstation_id
JOIN regions r ON wl.region_id = r.region_id
GROUP BY r.region_name, w.workstation_name
ORDER BY r.region_name, ticket_count DESC;

这个查询会输出每个区域下,各个工作站的工单数量,你可以清晰看到区域总计数的构成,完美实现“部分计数”的需求。

需求2:统计每个区域的工单数量,避免跨区域重复计数

如果你的需求是每个工单只归属到一个区域(比如优先算入工作站的主区域),那需要先确定工单的归属规则。假设workstation_region_links表里有is_primary字段标记工作站的主区域,那么可以这样写:

SELECT 
  r.region_name,
  COUNT(DISTINCT t.ticket_id) AS unique_ticket_count
FROM tickets t
JOIN workstation_region_links wl ON t.workstation_id = wl.workstation_id
JOIN regions r ON wl.region_id = r.region_id
WHERE wl.is_primary = 1 -- 仅统计工单所属工作站主区域的数量
GROUP BY r.region_name;

如果没有主区域标记,也可以用窗口函数给每个工作站的关联区域排序,取第一个关联的区域来统计:

WITH workstation_primary_region AS (
  SELECT 
    workstation_id,
    region_id,
    ROW_NUMBER() OVER (PARTITION BY workstation_id ORDER BY region_id) AS rn
  FROM workstation_region_links
)
SELECT 
  r.region_name,
  COUNT(t.ticket_id) AS ticket_count
FROM tickets t
JOIN workstation_primary_region wpr ON t.workstation_id = wpr.workstation_id AND wpr.rn = 1
JOIN regions r ON wpr.region_id = r.region_id
GROUP BY r.region_name;

小提示:报表呈现

拿到这些查询结果后,你可以用表格展示区域+工作站的工单明细,或者用堆叠柱状图直观展示每个区域下各工作站的工单占比,让“部分计数”的结果一目了然。

内容的提问来源于stack exchange,提问作者Santiago Capdevila

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:44:16