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

使用子查询/CTE求部门薪资总和最值的SQL查询失败问题

问题原因分析

你原来的查询逻辑存在核心错误:

  • 子查询sum_sal_per_dpt已经按dpt_id分组,算出了每个部门的薪资总和total_salaries,每个部门对应唯一的一条记录。
  • 外层查询再按dpt_id分组时,每个分组内只有一条数据,此时max(total_salaries)和min(total_salaries)作用在单个值上,结果就是这个值本身。
  • 两个select语句本质上都等价于select dpt_id, total_salaries from sum_sal_per_dpt,用union合并后自然返回所有部门的数据,而非你需要的最高/最低薪资总和的部门。
正确查询写法

方法一:通过子查询筛选极值对应的部门

with sum_sal_per_dpt as (
    select dpt_id, sum(salary) as total_salaries
    from salaries
    group by dpt_id
)
select dpt_id, total_salaries
from sum_sal_per_dpt
where total_salaries = (select max(total_salaries) from sum_sal_per_dpt)
   or total_salaries = (select min(total_salaries) from sum_sal_per_dpt);

方法二:使用窗口函数(推荐,支持并列极值场景)

如果存在多个部门薪资总和同为最高/最低的情况,窗口函数能保留所有符合条件的部门:

with sum_sal_per_dpt as (
    select dpt_id, sum(salary) as total_salaries
    from salaries
    group by dpt_id
),
ranked_depts as (
    select dpt_id, total_salaries,
           rank() over(order by total_salaries desc) as rank_highest,
           rank() over(order by total_salaries asc) as rank_lowest
    from sum_sal_per_dpt
)
select dpt_id, total_salaries
from ranked_depts
where rank_highest = 1 or rank_lowest = 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 09:40:24