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
相关产品推荐
相关产品推荐

