需要oracle查询

时间:2013-04-14 06:43:41

标签: sql oracle top-n

我正在练习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?

3 个答案:

答案 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