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

SQL JOIN后按去重列统计SUM值 实现按城市聚合捐款总额

问题解决说明

现有语句问题

  • 你已经完成了「按用户维度统计捐款总额」的子查询逻辑,但在后续按城市分组时,没有对每个用户的捐款总和做二次聚合,因此只返回了每个城市下单个用户的捐款额。
  • SELECT语句中包含me.id,这个字段既不属于GROUP BY的分组维度,也没有使用聚合函数,在开启ONLY_FULL_GROUP_BY校验的数据库(如MySQL 5.7及以上版本)中会直接执行报错。

正确实现方案

方案1:基于原有逻辑修改

在原有子查询的基础上,外层查询新增对用户捐款总和的二次聚合即可:

SELECT me.city, SUM(don.mySUM) AS total_amount
FROM members me
LEFT JOIN (
    SELECT member_id, SUM(amount) AS mySUM 
    FROM donations 
    GROUP BY member_id
) don ON don.member_id = me.id
GROUP BY me.city
ORDER BY total_amount DESC;

方案2:更简洁的直接聚合写法

不需要嵌套子查询,直接关联两张表后按城市分组即可,执行效率更高:

SELECT me.city, SUM(don.amount) AS total_amount
FROM members me
LEFT JOIN donations don ON don.member_id = me.id
GROUP BY me.city
ORDER BY total_amount DESC;

如果需要将无捐款城市的总额显示为0而非NULL,可以将求和逻辑修改为COALESCE(SUM(don.amount), 0)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:09:03