-1

我需要进行查询以获取没有 MAX 功能的薪水最高的员工。我搜索了执行此操作的方法,发现“rownum”与“order by”相结合,但要正确执行此操作,我们需要对 from 子句进行子查询,我不能这样做,因为老师禁止这样做。

有人知道解决方案吗?

谢谢并原谅我的英语。

4

4 回答 4

2

你可以使用一些不常用的 SEMI-JOIN:

WHERE employee.salary >= ALL (...subquery...)

还有许多其他可能性,例如NOT EXISTS.

于 2013-02-15T16:58:50.060 回答
1
SELECT deptno, e1.empno, e1.sal
  FROM scott.emp e1
 WHERE e1.sal >= ALL (SELECT e2.sal
                 FROM   scott.emp e2
                 WHERE  e2.deptno = 20 -- or e2.deptno = e1.deptno
                 )
 ORDER BY deptno
 /

DEPTNO  EMPNO   SAL
------------------------
10     7839    5000
20     7788    3000
20     7902    3000
于 2013-02-15T17:19:45.850 回答
0
Select employee FROM 
   (Select * FROM tblEmployees ORDER BY Salary DESC)
       Where rownum = 1;

返回具有最高薪水的员工,而不使用等级或最大值。

于 2013-02-15T18:40:55.933 回答
0
with emp_data as (
    select empno,
           sal,
           deptno,
           row_number() over (order by sal desc) as rn
    from emp
) 
select * 
from emp_data 
where rn = 1;

这既不max()是在子句中使用也不是使用子查询from(尽管有人可能会争辩说使用公用表表达式是一种绕过“无子查询”要求的方法)

于 2013-02-15T19:45:27.440 回答