任何人都可以向我解释以下查询的运行时执行: -
select distinct sal
from emp e1
where 3 = (select count(distinct sal)
from emp e2
where e1.sal <= e2.sal);
答案 0 :(得分:2)
select distinct sal
from emp e1
where 3 = (
select count(distinct sal)
from emp e2
where e1.sal <= e2.sal
)
它是一个相关查询,表示子查询为外部查询的每一行运行:
子查询返回大于或等于给定工资的不同工资的计数
例如,emp表中有以下值:
10
20
30
40
假设外部查询位于sal = 40的行中。子查询返回的计数将为1.
for sal = 30, count = 2
for sal = 20, count = 3
for sal = 10, count = 4
所以只有符合条件的行才是sal = 20的行,这就是你想要的。
更好的方法是使用rank:
select distinct sal
from (
select t.*,
dense_rank() over (
order by salary desc
) as rnk
from your_table t
) t
where rnk = 3;
答案 1 :(得分:0)
我认为更简单的方法是使用(相当新的)函数NTH_VALUE:
SELECT DISTINCT NTH_VALUE(salary, 3) OVER ()
FROM your_table;