2016-05-07 4 views
1

ich die folgende SQL-Abfrage in Postgres haben:Wie bekomme ich das folgende SQL-Abfragerecht, um die oberen N Ergebnisse innerhalb einer Gruppe auszuwählen?

SELECT * FROM tableName ORDER BY a,b,c 

ich innerhalb jeder Gruppe eine wollen, b - nur die Top-10-Ergebnisse durch die Reihenfolge von a, b, c wird gewählt werden.

habe ich versucht, Dinge wie

SELECT * FROM tableName ORDER BY a,b,c LIMIT 10 

aber das ist natürlich nicht richtig - es gibt die Top-10 weltweit Ergebnisse.

Wie kann ich die Top 10 Ergebnisse innerhalb jeder Gruppe von a, b, geordnet nach a, b, c auswählen?

Antwort

3

Sie verwenden row_number():

select t.* 
from (select t.*, 
      row_number() over (partition by a, b order by c) as seqnum 
     from tablename t 
    ) t 
where seqnum <= 10;