1

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

还有其他简单的方法吗?(使用内部连接或其他方式?)

我也想知道:我们究竟什么时候必须使用内连接而不是使用子查询?我们究竟什么时候必须使用子查询而不是内连接?

4

3 回答 3

1

为什么在这里使用 JOIN?

select 
  deptid,
  min(name) keep (dense_rank first order by salary desc),
  max(salary)
from 
  employee 
group by
  deptid
于 2013-04-14T06:52:11.590 回答
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 个表中检索列..(所以不使用联接?)

于 2013-04-14T10:03:24.760 回答
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
于 2013-04-14T13:25:24.113 回答