1
如何找到emp表中每個部門的前2名工資?Oracle 10 g -SQL
Emp Table
-----------
Row_id Salary Dept
R1 2000 D1
R2 3000 D1
R3 4000 D1
R4 5000 D1
R5 2000 D2
R6 3000 D2
R7 4000 D2
R8 5000 D2
如何找到emp表中每個部門的前2名工資?Oracle 10 g -SQL
Emp Table
-----------
Row_id Salary Dept
R1 2000 D1
R2 3000 D1
R3 4000 D1
R4 5000 D1
R5 2000 D2
R6 3000 D2
R7 4000 D2
R8 5000 D2
select
row_id,salary,dept
from
(
select
row_number() over (partition by dept order by salary desc) as sno,
row_id,salary,dept
from emp
) t
where sno<=2
請儘量將
select T1.Dept,T2.Salary
from Emp_Table T1 join Emp_Table T2
on T1.Dept=T2.Dept
and T1.Salary>=T2.Salary
group by T1.Dept,T2.Salary
having COUNT(*) <=2
這可能是時間cousuming對於大表 – Madhivanan 2012-07-16 06:37:40
'ROW_ID'是唯一的,這樣這個查詢不會返回任何行。如果你加入'DEPT',你會得到一些結果,但是它比分析函數版本的效率低得多。 – 2012-07-16 06:40:20
@JustinCave:謝謝你的評論..我已經改變了我的查詢,加入了部門,我在早些時候測試了我的查詢。現在我已經驗證了結果。當我看到這篇文章時,已經有了和row_number()函數的答案。這就是爲什麼我給出了不同的解決方案。關於性能,我不認爲有巨大的差異,因爲我使用相同類型的查詢對很大的表,它只是運行良好。 – 2012-07-16 07:38:42