我正在研究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;
这是错的。你能帮帮我吗?
答案 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_number
或dense_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