2013-08-06 11 views
6

Annunciare la mia interrogazione di una tabella i debiti che ha la lista dei documenti ap di cui ciascuno ha (tra gli altri campi) quelli che sono interessato di eseguire query di aggregazione oltre:Utilizzando Postgres funzione di rango per limitare al n cima risultati

vendor_id, importo e una data.

Vorrei costruire la query su questa tabella dove vorrei ottenere, raggruppati per anno, i primi 10 fornitori ordinati per totale (somma degli importi).

Qualcuno potrebbe dirmi come usare la funzione di classificazione per questo.

+2

Sede [Summing e ordinare in una sola volta] (http://stackoverflow.com/questions/15536667/) –

risposta

7
select * 
from (
    select the_year, vendor_id, amount, 
     row_number() over(
      partition by the_year 
      order by amount desc 
     ) as rn 
    from (
     select 
      date_trunc('year', the_date) as the_year, 
      vendor_id, 
      sum(amount) as amount 
     from ap 
     group by 1, 2 
    ) s 
) s 
where rn <= 10 
order by the_year, amount desc 
+0

Meraviglioso! Ho fatto una piccola modifica perché c'era un coma dopo una partizione ma comunque un consiglio eccellente. Funziona veloce e preciso. – Edmon

Problemi correlati