如何计算表中指定group_id及其子组的金额总和?SQL语句求助
正确SQL实现方案
嘿,我来帮你搞定这个SQL问题!先说说你原来语句的问题:你写的CASE WHEN fee_groups.groups_id = fee_groups.parent_fee_groups_id THEN amount ELSE 0 END是在判断当前行的group_id和自身的parent_group_id是否相等,这一般是用来找顶级分组(如果数据里顶级组的parent_id等于自身的话),但这和你要的「group_id为69的行 + 所有parent_group_id为69的行」完全不匹配,所以自然得不到预期结果。
针对你的需求,有两种简单直接的实现方式:
方式一:直接筛选符合条件的行求和
这是最直观的写法,先把目标行筛选出来,再对amount求和:
SELECT SUM(amount) AS total FROM fee_groups WHERE group_id = 69 OR parent_group_id = 69;
用你提供的测试数据,这个语句会返回1700(1000+700),正好是你要的结果。
方式二:用CASE表达式在全局查询中计算
如果你的需求是在更复杂的查询(比如和其他统计字段一起输出)中计算这个总和,可以用CASE表达式来标记符合条件的行:
SELECT SUM(CASE WHEN group_id = 69 OR parent_group_id = 69 THEN amount ELSE 0 END) AS total FROM fee_groups;
这个写法会遍历所有行,只对符合条件的行的amount进行累加,最终结果和方式一一致。
内容的提问来源于stack exchange,提问作者Maniraj Murugan
相关产品推荐
相关产品推荐

