PostgreSQL: come visualizzare i primi N record di ogni gruppo
Di recente mi è capitato di dover produrre un report dove si volevano, per ogni venditore inserito nei database aziendali, le prime 5 categorie merceologiche in cui vende più offerte. Il problema di scrivere una query per selezionare i primi N elementi di un gruppo non è banale. Semplificando al massimo il caso reale, si può vedere come se in gioco ci fosse un'unica tabella offers , dove ogni record è composto da: id venditore ( seller ) categoria dell'offerta ( category ) La richiesta non è facilmente esprimibile con una query ma, ho scoperto che da PostgreSQL 9.1 viene offerta una sintassi molto naif per realizzarla. Bisogna combinare due window function , ovvero due funzioni che permettono di fare calcoli su insiemi di righe: row_number() : fornisce il numero di riga in un certo insieme, partendo da 1 select over partition : permette di selezionare qualcosa in una partizione di dati La query che risponde all'esigenza di avere le prime 5 categorie ...