我正在练习Oracle子查询..(我是Oracle新手。)
问题:找到每个部门的最高收入员工?
我的下面的查询有效(但我感觉不太好,即使我得到了正确的结果)
select e.deptid, e.name, e.salary
from employee e
where e.salary = (select max(salary)
from employee b
where b.deptid = e.deptid )
还有另一种简单方法吗? (使用内连接或其他方式?)
我也想知道:我们什么时候必须使用内部联接而不是使用SubQueries?什么时候我们必须使用SubQueries而不是Inner join?
答案 0 :(得分:1)
为什么在这里使用JOIN?
select
deptid,
min(name) keep (dense_rank first order by salary desc),
max(salary)
from
employee
group by
deptid
答案 1 :(得分:0)
我还有另一个查询,如下所示:
select dept_id, fname,salary
from (select dept_id, fname,salary,
rank() over (order by salary desc) ranking
from department d, employee e
where d.dept_id = e.deptid) where ranking=1;
我觉得上面是正确的,但我在上面的查询中有疑问:我没有在我的查询中使用任何联接但仍然能够从2个表中检索列...(所以没有用加入?)
答案 2 :(得分:0)
你很亲密 - 你在rank
select *
from (
select dept_id , fname , salary ,
rank() over (partition by dept_id order by salary) as rnk
from department d, employee e
where d.dept_id = e.deptid
where rnk = 1