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

PostgreSQL用GROUP BY按城市分组后如何查询对应最高薪资的员工姓名

实现每个城市最高薪资对应员工查询的SQL方案

已知employee表包含字段id、name、city、salary,针对需求提供两种主流实现方案:

方案1:子查询+JOIN(兼容所有主流数据库版本)

先通过GROUP BY拿到每个城市的最高薪资,再和原员工表关联匹配即可,适配MySQL 5.x等不支持窗口函数的旧版本数据库:

SELECT e.city, e.name, e.salary
FROM employee e
INNER JOIN (
    SELECT city, MAX(salary) AS max_salary
    FROM employee
    GROUP BY city
) t ON e.city = t.city AND e.salary = t.max_salary;

如果同一个城市有多名员工薪资相同且都是最高值,该语句会全部返回符合条件的记录。

方案2:窗口函数(适配支持SQL:2003标准的新版本数据库)

用RANK()窗口函数按城市分组对薪资降序排序,筛选排名第一的记录即可,写法更简洁:

SELECT city, name, salary
FROM (
    SELECT 
        city, name, salary,
        RANK() OVER (PARTITION BY city ORDER BY salary DESC) AS salary_rank
    FROM employee
) t
WHERE salary_rank = 1;

如果需要同一城市仅返回一条最高薪资记录,可以把RANK()替换为ROW_NUMBER(),搭配额外排序规则即可确定唯一返回值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:54:04