【发布时间】:2016-07-17 15:49:25
【问题描述】:
我正在做我的 SQL 练习,但我陷入了其中。我需要检索两个薪水最高的员工,但我不能使用任何类型的子查询或派生表。我用这样的子查询来做:
SELECT *
FROM (SELECT * FROM emp ORDER BY sal DESC) new_emp
WHERE ROWNUM < 3;
我也知道这可以使用WITH 子句来实现,但我想知道是否有任何替代方法。
PS:我使用的是 Oracle 11。
【问题讨论】:
-
从技术上讲,这不是“子查询”,而是派生表。您使用的是哪个 Oracle 版本?在 Oracle 12 中,您可以使用 ANSI SQL
fetch first 3 rows only -
您正在使用内联视图。当你在 where 子句中有查询时,它就是一个子查询。
-
是的,我知道,我们也不能使用派生表(我忘了提这个,抱歉)。我正在使用 Oracle 11
-
如果两个以上的员工拥有相同的(最高)工资应该怎么办?或者一个具有最高的,两个具有相同的次高?
标签: sql oracle oracle11g window-functions row-number