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

如何在不创建视图的前提下对SQL多子查询结果按部门分组求和?

解决部门分组求和的SQL方案

核心思路

先消除benefitdistribution表中多PLU记录带来的重复数据,再进行关联和最终分组,避免因PLU重复导致部门数据被多次统计。

具体实现代码

假设你的原查询涉及benefitdistribution表与其他业务表关联,调整后的SQL如下:

SELECT
    dept.deptno,
    -- TargetGP为部门唯一值,用MAX/MIN提取即可
    MAX(agg_plu.TargetGP) AS TargetGP,
    -- 基于汇总后的销售、成本数据计算部门GP
    SUM(agg_plu.sales_total) - SUM(agg_plu.cost_total) AS GP
FROM (
    -- 第一步:对benefitdistribution按部门聚合,消除PLU重复
    SELECT
        deptno,
        TargetGP,
        SUM(plu_sales_amount) AS sales_total,
        SUM(plu_cost_amount) AS cost_total
    FROM benefitdistribution
    GROUP BY deptno, TargetGP
) agg_plu
-- 关联其他需要的业务表(如果有)
JOIN department_info dept ON agg_plu.deptno = dept.deptno
GROUP BY dept.deptno;

关键说明

  • 预聚合消除重复:通过子查询先对benefitdistribution按deptno和TargetGP分组,将PLU级的销售、成本数据汇总到部门级,确保每个部门仅返回一条记录
  • TargetGP取单值:由于每个部门的TargetGP是唯一值,使用MAX()或MIN()聚合函数可以安全提取该值,不会改变结果
  • GP计算逻辑:基于预聚合后的部门级销售、成本总和计算GP,保证结果是部门维度的准确值

内容的提问来源于stack exchange,提问作者Dave Hamilton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 15:31:10