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

SQL计算列值减另一列分组总和,关联studenttbl与feeTbl查询行数异常如何解决

问题根因

返回行数超过预期,核心原因是GROUP BY子句中包含了coursefeeval字段。从你提供的feeTbl示例数据可以看到,sid为1002的学生有两条记录对应不同的cNameVal和coursefeeval:一门课程费用5000,另一门6000,分组时会把这两个不同的coursefeeval拆成两个独立分组,加上sid为1001的分组,最终就返回了3行结果。

解决方案

你需要先对feeTbl按学生维度做聚合计算,得到每个学生的总学费、总已缴金额之后,再和studenttbl关联,修正后的SQL如下:

SELECT 
    s.sid,
    s.snameVal,
    f.total_course_fee - f.total_paid AS balance,
    s.sPhoneVal,
    CONVERT(varchar, s.sdateVal, 106) AS sdateVal
FROM studenttbl s
INNER JOIN (
    -- 按学生维度聚合计算总学费、总已缴金额
    SELECT 
        sid,
        -- 同一门课程的courseFeeVal重复出现时仅计一次,汇总所有课程总费用
        SUM(DISTINCT courseFeeVal) AS total_course_fee,
        -- 汇总所有缴费记录的总金额
        SUM(paidVal) AS total_paid
    FROM feeTbl
    GROUP BY sid
) f ON s.sid = f.sid

效果验证

拿你提供的示例数据计算:

  • 1001学生总学费为4000,总已缴金额为1000+1000=2000,余额2000
  • 1002学生总学费为5000+6000=11000,总已缴金额为1000+5000=6000,余额5000

最终仅返回2行结果,符合预期。


内容的提问来源于stack exchange,提问作者Vivek Raj Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:06:04