0
任何人都請給我解釋一下下面的查詢的運行時執行: -解釋如何找到了在表emp第三MAX工資
select distinct sal
from emp e1
where 3 = (select count(distinct sal)
from emp e2
where e1.sal <= e2.sal);
任何人都請給我解釋一下下面的查詢的運行時執行: -解釋如何找到了在表emp第三MAX工資
select distinct sal
from emp e1
where 3 = (select count(distinct sal)
from emp e2
where e1.sal <= e2.sal);
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 ROW = 20,其你想要什麼。
一個更好的辦法可以使用等級:
select distinct sal
from (
select t.*,
dense_rank() over (
order by salary desc
) as rnk
from your_table t
) t
where rnk = 3;
我認爲較短的方法是,當你使用(而新)功能NTH_VALUE:
SELECT DISTINCT NTH_VALUE(salary, 3) OVER()
FROM your_table;
更好地解釋你的問題..? – scaisEdge
這是一種非常陳舊(低效)的方式來計算它。看看'DENSE_RANK'來代替。 – dnoeth