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

如何在多表中结合GROUP_CONCAT与GROUP BY实现SUM统计?

解决工具分配统计的SQL查询问题

看起来你在统计工具分配情况时遇到了分组和字符串拼接的问题,先帮你梳理下现有语句的问题,再给出正确的解决方案:

现有语句的问题

  1. 拼写错误:user.deparment 应该是 users.department,tool_asigned 应该是 tool_assigned
  2. 分组逻辑错误:你当前按tools.name和users.department分组,会得到每个工具对应每个部门的单独行,而不是按工具汇总所有部门的统计信息

正确的SQL语句

要实现你需要的结果,我们需要先按「工具+部门」统计各部门的分配总量,再按工具做二次聚合,拼接部门统计信息:

SELECT
  t.id AS id_tool,
  t.name AS tool_name,
  SUM(sub.dept_total) AS total_quantity,
  GROUP_CONCAT(CONCAT(u.department, '-', sub.dept_total) ORDER BY u.department SEPARATOR ', ') AS summary_department
FROM tools t
INNER JOIN (
  -- 子查询:先统计每个工具在每个部门的总分配数量
  SELECT
    ta.id_tool,
    u.department,
    SUM(ta.quantity) AS dept_total
  FROM tool_assigned ta
  INNER JOIN users u ON ta.id_user = u.id
  GROUP BY ta.id_tool, u.department
) sub ON t.id = sub.id_tool
GROUP BY t.id, t.name
ORDER BY t.id;

语句说明

  1. 子查询部分:关联tool_assigned和users表,按工具ID和部门分组,计算每个工具在对应部门的总分配量,得到「工具-部门-部门总量」的中间结果。
  2. 外层查询:关联工具表和子查询结果,按工具ID和名称分组:
    • SUM(sub.dept_total):累加该工具所有部门的分配量,得到总数量
    • GROUP_CONCAT(...):将每个部门的「部门名-数量」字符串用逗号拼接,ORDER BY u.department可以让部门按字母顺序排列,结果更整洁
  3. 最后按工具ID排序,确保结果顺序和你期望的一致

执行这个语句后,会得到符合需求的统计结果(注:你的示例结果里c-2应该是笔误,因为你的用户表只有a和b两个部门)。

内容的提问来源于stack exchange,提问作者Jhon Maldonado

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:13:51