Oracle 甲骨文第三高薪
我一直在寻找从数据库(使用Oracle数据库)中查找第三高工资的查询。我找到了下面的查询-Oracle 甲骨文第三高薪,oracle,oracle-sqldeveloper,Oracle,Oracle Sqldeveloper,我一直在寻找从数据库(使用Oracle数据库)中查找第三高工资的查询。我找到了下面的查询- SELECT * FROM ( SELECT e.*, row_number() over (order by sal DESC) rn FROM emp e ) WHERE rn = 3; 我的系统中没有安装oracle,所以我不会尝试。但是我想知道下面的查询是否有效。若否,原因为何 WITH Sal_sort AS (SELECT DISTINCT sal FROM salary ORD
SELECT *
FROM
( SELECT e.*, row_number() over (order by sal DESC) rn FROM emp e
)
WHERE rn = 3;
我的系统中没有安装oracle,所以我不会尝试。但是我想知道下面的查询是否有效。若否,原因为何
WITH Sal_sort AS
(SELECT DISTINCT sal FROM salary ORDER BY sal DESC
)
SELECT * FROM Salary S, Sal_sort SS WHERE S.Sal = SS.Sal AND SS.rownum = 3;
输入数据
emp_no emp_fname emp_lname salary
1 aa bb 30
2 ee yy 31
3 rr uu 32
4 tt ii 33
5 tt ii 33
6 tt ii 33
7 tt ii 33
8 tt ii 30
9 tt ii 31
示例:
select * from ee;
select emp_no,salary ,dense_rank() over (order by salary ) dr
from ee
输出
emp_no salary dr
1 30 1
8 30 1
9 31 2
2 31 2
3 32 3
4 33 4
5 33 4
6 33 4
7 33 4
就一行
select * from (
select salary,dense_rank() over (order by salary desc) rank from employees) where rank=3;
或
在数据库的第12版和更高版本中更容易
SELECT *
FROM employees
ORDER BY salary DESC OFFSET 2 ROWS FETCH NEXT 1 ROWS ONLY
Tim谈到了这个功能
如果你看一下这个计划,你会发现它并不神奇,优化器正在使用分析函数来推导结果
无密集等级()
具有密集等级()
下载Express edition进行测试。你甚至不必安装Oracle,你也可以在这里尝试这是“选择第n行”问题的一个变体,“我的系统中没有安装Oracle”,点击这里:排名第一的是Larry Ellison
SELECT *
FROM employees
ORDER BY salary DESC OFFSET 2 ROWS FETCH NEXT 1 ROWS ONLY
SELECT salary FROM employees
ORDER BY salary DESC
OFFSET 2
FETCH 1 NEXT ONE ROWS ONLY;
SELECT salary
FROM
(
SELECT salary, DENSE_RANK() OVER (ORDER BY salary DESC) as rank from employees
)
WHERE rank = 3;