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

SQL分组查询需求:按id和year求和amt且排除dept=B

解决SQL分组后返回非B部门的问题

原SQL语句的核心问题是:GROUP BY id, year时,SELECT中包含未做聚合处理的dept字段,数据库会随机返回分组内某条记录的dept值,因此才会出现返回B的情况。要确保返回分组内的非B部门,同时保留按id+year统计所有符合条件的amt总和,可按以下方式修改:

修改后的SQL语句

SELECT 
    id, 
    year, 
    MAX(CASE WHEN dept != 'B' THEN dept END) AS dept,
    SUM(amt) AS total_amt
FROM company a
WHERE dept IN ('A', 'B')
GROUP BY id, year

逻辑说明

  • 聚合提取非B部门:通过CASE WHEN dept != 'B' THEN dept END筛选出分组内的非B部门,再用MAX()聚合函数(若分组内只有一个非B部门,MAX()和MIN()效果一致)固定返回该部门,避免随机值。
  • 保留总和统计:SUM(amt)依然会统计分组内所有A、B部门的amt总和,符合需求。

如果你的业务场景中,同一个id+year分组可能存在多个非B部门,可根据实际需求调整聚合逻辑(例如用STRING_AGG()拼接多个部门,或添加额外条件筛选特定部门)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 03:02:34