2016-04-29 10 views
1

ich eine SQL-Abfrage wollen Top-3 Gehälter der einzelnen AbteilungenOracle Abfrage Top-3 Gehälter der einzelnen Abteilungen zu holen

Table :- sample 

Name Salary Dept 
AA  1000 Hr 
BB  7520 Store 
CC  12500 Hr 
DD  9850 Store 
EE  10250 Finance 
FF  12560 Hr 
GG  13500 Store 
HH  15680 Store 
KK  12853 Hr 
MM  17582 Finance 
NN  16852 Finance 

ich die unten Abfrage verwendet holen, aber es ist das Abrufen nicht korrekte Ergebnis

SELECT dept, fname,lname,sal from sample where rownum<4 group by(fname,lname,sal,desg) order by sal desc 

Antwort

0

group by Versuchen und dann where rownum < 4

SELECT dept,fname,lname,sal 
FROM sample 
GROUP BY(fname,lname,sal,desg) 
WHERE ROWNUM < 4 
ORDER BY sal DESC 
; 

überprüfen Sie auch SELECT und GROUP BY Spalten als die Tabelle nur NAME und nicht fname und lname.

+0

Hallo, die obige Abfrage noch nicht das gewünschte Ergebnis – suvendu

+0

hv verwendet Namen holen, aber es ist das Abrufen nicht die gewünschte eiter – suvendu

+0

Pham X Lösung Versuchen Sie unten. –

2

Was Sie brauchen, ist die analytische Funktion row_number

select * 
from (select a.*, row_number() over (PARTITION by dept order by salary desc) as num 
     from sample a 
) 
where num < 4;