需要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 语法而不是 ANSI join ... on 语法。

以上是关于需要oracle查询[重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Oracle 12c 查询需要在表周围加上双引号 [重复]

从另一个 Oracle 用户查询列名 [重复]

oracle查询出来的数据如何消除重复数据

oracle查询重复数据出现次数

oracle 查询两个字段的值重复的记录

oracle中表A中有若干完全重复的字段,怎样查询出不是重复的信息