MAX 和 GROUP BY - SQL

MAX and GROUP BY - SQL

我在 Oracle SQL 和 HR 数据库上工作,我正在尝试 select 在这样的部门中获得最高薪水:

SELECT MAX(salary), department_id
FROM employees GROUP BY department_id;

它工作正常,但我想知道>谁<赚得最多,所以我只是这样更改查询:

SELECT first_name, last_name, MAX(salary), department_id
FROM employees GROUP BY department_id;

这是错误的。你能帮帮我吗?

创建视图:

create view max_salary as select max(salary), department_id from    employees group by department_id

然后创建查询:

select first_name, last_name, salary, department_id
from employees a, max_salary b
where a.department_id = b.department_id
and a.salary = b.salary

进行此类分析的最有效方法通常是使用分析函数(window 函数)。像

SELECT first_name,
       last_name,
       salary,
       department_id
  FROM (SELECT e.*,
               rank() over (partition by department_id 
                                order by salary desc) rnk
          FROM employees e)
 WHERE rnk = 1

取决于你想如何处理关系(如果部门中的两个人都获得最高薪水,例如,你想让两个人都 returned 还是 return 任意两者之一),您可能想要使用 row_numberdense_rank 函数而不是 rank.