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

如何对salary表按deptid分组求和后,获取最大值与第二大值及对应部门

方案1:简单排序取值(适配大多数支持LIMIT的数据库)

如果你不需要处理并列排名的场景,直接对分组求和后的结果按薪资总和倒序,取前2条即可,同时可以返回对应的部门ID:

SELECT deptid, SUM(salary) AS dept_total_salary
FROM salary
GROUP BY deptid
ORDER BY dept_total_salary DESC
LIMIT 2;

方案2:窗口函数实现(适配支持窗口函数的数据库,可处理并列排名)

如果需要处理多部门薪资总和并列的场景,推荐用DENSE_RANK窗口函数实现,排名逻辑更可控:

WITH dept_salary_summary AS (
    SELECT 
        deptid,
        SUM(salary) AS dept_total_salary,
        -- 按部门薪资总和倒序排名,并列值排名相同,不跳过后续排名位
        DENSE_RANK() OVER(ORDER BY SUM(salary) DESC) AS salary_rank
    FROM salary
    GROUP BY deptid
)
SELECT deptid, dept_total_salary
FROM dept_salary_summary
WHERE salary_rank <= 2;

如果需要并列后跳过排名位,可以把DENSE_RANK替换为RANK函数。

原有语句错误原因

  • WHERE子句中IN关键字前缺少匹配的字段,语法不合法
  • 子查询没有按deptid分组,返回的是全表薪资总和,不是各部门的汇总结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:57:05