2016-04-20 4 views
2
------------------------------------------------ 
country | salary | name | adress 
------------------------------------------------ 
India | 10000 | ch1  | something 
japan | 20000 | ch2  | nothing 
india | 25000 | ch3  | hjsdj 
japan | 30000 | ch4  | hjhjhj 

Ich brauche max Gehalt in Japan und auch in Indien mit Adresse, Name.Wie bekomme ich max Gehalt Zeile, Gruppe nach Land

+0

Welches DBMS verwenden Sie? Dies kann leicht mit Hilfe von Fensterfunktionen gelöst werden. –

Antwort

4

Haben Sie eine Unterabfrage, die das maximale Gehalt jedes Landes zurückgibt. Nehmen Sie an diesem Ergebnis teil, um die Nutzer mit diesem maximalen Gehalt zu erreichen.

select t1.* 
from tablename t1 
join (select country, max(salary) as max_salary 
     from tablename group by country) t2 
    on t1.country = t2.country and t1.salary = t2.max_salary 

werden beide Benutzer zurück, wenn es ein Unentschieden (dh mehrere Anwender mit dem gleichen maximalen Gehalt.) Ist

0

Wenn durch Zufall Ihr DBMS unterstützt ROW_NUMBER() OVER() -Funktion können Sie versuchen,

select * from 
    (select ROW_NUMBER() OVER(PARTITION BY country ORDER BY salary DESC) as rn 
    , country, salary as max_salary, name, adress 
    from tablename 
) t 
where rn = 1 

Hinweis, im Gegensatz zu Jarlhs Abfrage wird es nur eine willkürliche Reihe von gleichen Spitzengehälter Zeilen für das Land zurückgeben.

Verwandte Themen