我需要进行查询以获取没有 MAX 功能的薪水最高的员工。我搜索了执行此操作的方法,发现“rownum”与“order by”相结合,但要正确执行此操作,我们需要对 from 子句进行子查询,我不能这样做,因为老师禁止这样做。
有人知道解决方案吗?
谢谢并原谅我的英语。
你可以使用一些不常用的 SEMI-JOIN:
WHERE employee.salary >= ALL (...subquery...)
还有许多其他可能性,例如NOT EXISTS
.
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
Select employee FROM
(Select * FROM tblEmployees ORDER BY Salary DESC)
Where rownum = 1;
返回具有最高薪水的员工,而不使用等级或最大值。
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
(尽管有人可能会争辩说使用公用表表达式是一种绕过“无子查询”要求的方法)