MAX和GROUP BY - SQL

时间:2015-06-08 22:31:41

标签: sql oracle max

我正在研究Oracle SQL和HR数据库,我试图选择部门中的最高工资:

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;

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

2 个答案:

答案 0 :(得分:1)

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

这样的东西
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

取决于你想要处理关系的方式(例如,如果部门中的两个人与最高工资挂钩,你想要两个人都退回,或者你想要任意退回两个中的一个),你可能想要使用row_numberdense_rank函数而不是rank

答案 1 :(得分:0)

创建视图:

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