Sai*_*Sai 2 sql oracle oracle11g
为了找出oracle中的第N个最大值,我使用下面的查询
SELECT DISTINCE sal
FROM emp a
WHERE (
SELECT COUNT(DISTINCE sal)
FROM emp b
WHERE a.sal<=b.sal)=&n;
Run Code Online (Sandbox Code Playgroud)
但据我说,使用上面的查询,如果表大小很大,将需要更多的时间来执行.
我正在尝试使用以下查询
SELECT sal
FROM (
SELECT DISTINCE sal
FROM emp
ORDER BY sal DESC )
WHERE rownum=3;
Run Code Online (Sandbox Code Playgroud)但没有得到输出..任何建议请..请分享任何关于如何优化查询和减少查询执行时间的链接.
vha*_*lgi 20
试试这个
select *
from
(
select
sal
,dense_rank() over (order by sal desc) ranking
from table
)
where ranking = 4 -- Replace 4 with any value of N
Run Code Online (Sandbox Code Playgroud)
SELECT sal FROM (
SELECT sal, row_number() OVER (order by sal desc) AS rn FROM emp
)
WHERE rn = 3
Run Code Online (Sandbox Code Playgroud)
是的,如果表很大,执行时间会更长。但是对于“第 N 行”查询,唯一的方法是查看所有数据并对其进行排序。如果你有sal的索引,它肯定会快得多。
小智 5
SELECT *
FROM Employee Emp1
WHERE (N-1) = (
SELECT COUNT(DISTINCT(Emp2.Salary))
FROM Employee Emp2
WHERE Emp2.Salary > Emp1.Salary)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
117975 次 |
| 最近记录: |