我需要进行查询以获得没有MAX功能的薪水最高的员工。 我搜索了这样做的方法,我发现'rownum'与'order by'相结合但是为了正确地做到这一点,我们需要对from子句做一个子查询,我不能这样做,因为老师禁止。
有人知道解决方案吗?
谢谢,请原谅我的英语。
答案 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
子句中的子查询(尽管可以说使用公用表表达式是一种欺骗“无子查询”要求的方法)