如何用单条SQL同时查询全表最高薪资和各人员最高薪资
解法1:结果同屏展示「每个姓名对应的最高薪资+全表最高薪资」(每行都携带全表最高值)
支持窗口函数的数据库(MySQL 8.0+、PostgreSQL、SQL Server等主流新版数据库都兼容)可以直接用窗口函数实现:
SELECT DISTINCT Name, MAX(Salary) OVER (PARTITION BY Name) AS max_salary_per_name, MAX(Salary) OVER () AS max_salary_global FROM your_table_name;
你的示例表运行后输出结果如下:
| Name | max_salary_per_name | max_salary_global |
|---|---|---|
| A | 5000 | 5000 |
| B | 4000 | 5000 |
| C | 5000 | 5000 |
解法2:合并两条查询的结果集(先输出全表最高、再输出各姓名最高)
如果需要完全对齐原来两条查询的输出形式,或是使用不支持窗口函数的旧版数据库,可以用UNION ALL拼接结果,全版本数据库兼容:
-- 第一部分:查询全表最高薪资,用固定标识区分行类型 SELECT '全局最高' AS Name, MAX(Salary) AS max_salary FROM your_table_name UNION ALL -- 第二部分:查询每个姓名对应的最高薪资 SELECT Name, MAX(Salary) AS max_salary FROM your_table_name GROUP BY Name;
你的示例表运行后输出结果如下:
| Name | max_salary |
|---|---|
| 全局最高 | 5000 |
| A | 5000 |
| B | 4000 |
| C | 5000 |
将代码中的your_table_name替换为实际表名即可直接运行。
内容的提问来源于stack exchange,提问作者Hari Tunes
相关产品推荐
相关产品推荐

