需要oracle查询[重复]
Posted
技术标签:
【中文标题】需要oracle查询[重复]【英文标题】:need oracle query [duplicate] 【发布时间】:2013-04-14 06:43:40 【问题描述】:我正在练习 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 )
还有其他简单的方法吗? (使用内部连接还是其他方式?)
我也想知道:我们究竟什么时候必须使用内连接而不是使用子查询?我们究竟什么时候必须使用子查询而不是内连接?
【问题讨论】:
您的查询不适用于很多员工有相同薪水的情况 为什么当有更多员工时它不起作用?,顺便说一句,员工和部门是不同的表......你知道为上述问题编写查询的其他方法吗? 这不是提议的副本的副本...它正在做一些完全不同的事情。 @JonathanLeffler - 好吧,这个怎么样? ***.com/q/1533240/146325 这对我来说效果更好...... 【参考方案1】:为什么在这里使用 JOIN?
select
deptid,
min(name) keep (dense_rank first order by salary desc),
max(salary)
from
employee
group by
deptid
【讨论】:
我没有得到这个:min(name) keep (dense_rank first order by Salary desc),顺便说一句,还有其他方法吗?【参考方案2】:你很接近 - 你错过了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
【讨论】:
【参考方案3】:我有另一个查询如下:
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 个表中检索列..(所以没用连接数?)
【讨论】:
您没有使用来自 DEPARTMENT 的任何数据,那么为什么您认为需要将其包含在查询中?但无论如何,你的内部查询确实有一个连接,它只是使用 WHERE 子句的 oder 语法而不是 ANSIjoin ... on
语法。以上是关于需要oracle查询[重复]的主要内容,如果未能解决你的问题,请参考以下文章