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

如何在SQL查询中按cEnrol分组添加费用总计列?

如何为同一cEnrol添加fee总和列?

我现有SQL语句:

SELECT cEnrol, name, course, month, year, status, fee FROM table

执行后得到结果:

cEnrolnamecoursemonthyearstatusfee
1AaaaZzzzzz012023Active100
1AaaaZzzzzz022023Active100
1AaaaZzzzzz032023Complete100
2BbbbYyyyyy012023Active200
2BbbbYyyyyy022023Active200
2BbbbYyyyyy032023Active200
2BbbbYyyyyy032023Complete200
3BbbbZzzzzz032023Active100
3BbbbZzzzzz032023Complete100

希望新增sumFees列,显示同一cEnrol对应的所有fee总和,得到如下结果:

cEnrolnamecoursemonthyearstatusfeesumFees
1AaaaZzzzzz012023Active100300
1AaaaZzzzzz022023Active100300
1AaaaZzzzzz032023Complete100300
2BbbbYyyyyy012023Active200800
2BbbbYyyyyy022023Active200800
2BbbbYyyyyy032023Active200800
2BbbbYyyyyy032023Complete200800
3BbbbZzzzzz032023Active100200
3BbbbZzzzzz032023Complete100200

我尝试过嵌套SELECT语句,但无法将总和关联到对应的cEnrol,请问该如何实现?


解决方案

方法1:使用窗口函数(推荐)

窗口函数是最简洁高效的实现方式,通过PARTITION BY按cEnrol分组计算总和:

SELECT 
    cEnrol, 
    name, 
    course, 
    month, 
    year, 
    status, 
    fee,
    SUM(fee) OVER (PARTITION BY cEnrol) AS sumFees
FROM table;

SUM(fee) OVER (PARTITION BY cEnrol)会针对每一行,计算当前行所属cEnrol分组下的所有fee总和,直接映射到对应行的sumFees列。

方法2:使用关联子查询

如果你的数据库不支持窗口函数,可以用关联子查询解决,核心是在子查询中添加关联条件,确保总和匹配当前行的cEnrol:

SELECT 
    t1.cEnrol, 
    t1.name, 
    t1.course, 
    t1.month, 
    t1.year, 
    t1.status, 
    t1.fee,
    (SELECT SUM(fee) FROM table t2 WHERE t2.cEnrol = t1.cEnrol) AS sumFees
FROM table t1;

这里子查询通过t2.cEnrol = t1.cEnrol关联主查询的行,保证每个cEnrol的总和只对应到相同编号的记录。


内容的提问来源于stack exchange,提问作者Matt Drake

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 18:05:57