查询没有MAX功能

时间:2013-02-15 16:51:01

标签: sql oracle function max

我需要进行查询以获得没有MAX功能的薪水最高的员工。 我搜索了这样做的方法,我发现'rownum'与'order by'相结合但是为了正确地做到这一点,我们需要对from子句做一个子查询,我不能这样做,因为老师禁止。

有人知道解决方案吗?

谢谢,请原谅我的英语。

4 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分: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

答案 2 :(得分:0)

Select employee FROM 
   (Select * FROM tblEmployees ORDER BY Salary DESC)
       Where rownum = 1;

返回薪水最高的员工,不使用等级或最高。

答案 3 :(得分: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子句中的子查询(尽管可以说使用公用表表达式是一种欺骗“无子查询”要求的方法)