Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Clausola GROUP BY
La clausola GROUP BY identifica le colonne di raggruppamento per la query. Viene utilizzato per raggruppare le righe in una tabella che hanno gli stessi valori in tutte le colonne elencate. L'ordine in cui sono elencate le colonne non ha importanza. Il risultato è combinare ogni set di righe con valori comuni in un'unica riga di gruppo che rappresenta tutte le righe del gruppo. Utilizzate un GROUP BY per eliminare la ridondanza nell'output e per calcolare gli aggregati che si applicano ai gruppi. Le colonne di raggruppamento devono essere dichiarate quando la query calcola gli aggregati con le funzioni standard, ad esempio SUM, AVG e COUNT. Per ulteriori informazioni, consulta Funzioni di aggregazione.
Sintassi
[ GROUP BY expression [, ...] | ALL | aggregation_extension ]
dove aggregation_extension è uno dei seguenti:
GROUPING SETS ( () | aggregation_extension [, ...] ) | ROLLUP ( expr [, ...] ) | CUBE ( expr [, ...] )
Parametri
- espressione
-
L'elenco di colonne o espressioni deve corrispondere all'elenco di espressioni non aggregate dell'elenco di selezione della query. A titolo illustrativo, prendi in considerazione la query semplice riportata di seguito.
select listid, eventid, sum(pricepaid) as revenue, count(qtysold) as numtix from sales group by listid, eventid order by 3, 4, 2, 1 limit 5; listid | eventid | revenue | numtix -------+---------+---------+-------- 89397 | 47 | 20.00 | 1 106590 | 76 | 20.00 | 1 124683 | 393 | 20.00 | 1 103037 | 403 | 20.00 | 1 147685 | 429 | 20.00 | 1 (5 rows)
In questa query, l'elenco di selezione è composto da due espressioni di aggregazione. La prima utilizza la funzione SUM e la seconda utilizza la funzione COUNT. Le restanti due colonne, LISTID ed EVENTID, devono essere dichiarate come colonne di raggruppamento.
Le espressioni nella clausola GROUP BY possono anche fare riferimento all'elenco di selezione usando numeri ordinali. A titolo illustrativo, l'esempio precedente potrebbe essere abbreviato come segue.
select listid, eventid, sum(pricepaid) as revenue, count(qtysold) as numtix from sales group by 1,2 order by 3, 4, 2, 1 limit 5; listid | eventid | revenue | numtix -------+---------+---------+-------- 89397 | 47 | 20.00 | 1 106590 | 76 | 20.00 | 1 124683 | 393 | 20.00 | 1 103037 | 403 | 20.00 | 1 147685 | 429 | 20.00 | 1 (5 rows)
- ALL
-
ALL indica di raggruppare in base a tutte le colonne specificate nell'elenco SELECT ad eccezione di quelle aggregate. Ad esempio, si consideri la seguente query che raggruppa per
col1
ecol2
senza doverle specificare singolarmente nella clausola GROUP BY. La colonnacol3
è l'argomento dellaSUM
funzione e quindi non è raggruppata.SELECT col1, col2 sum(col3) FROM testtable GROUP BY ALL
Se si ESCLUDE una colonna nell'elenco SELECT, la clausola GROUP BY ALL non raggruppa i risultati in base a quella colonna specifica.
SELECT * EXCLUDE col3 FROM testtable GROUP BY ALL
- estensione di aggregazione
-
È possibile utilizzare le estensioni di aggregazione GROUPING SETS, ROLLUP e CUBE per eseguire il lavoro di più operazioni GROUP BY in una singola istruzione. Per ulteriori informazioni sulle estensioni di aggregazione e sulle funzioni correlate, consulta Estensioni di aggregazione.
Esempi
Gli esempi seguenti utilizzano la tabella SALES che contiene le colonne: salesid, listid, sellerid, buyerid, eventid, dateid, qtysold, pricepaid, commission e saletime. Per ulteriori Database di esempio informazioni sulla tabella SALES, vedere.
Il seguente esempio di query raggruppa i gruppi per salesid
e listid
senza doverli specificare singolarmente nella clausola GROUP BY. La colonna qtysold
è l'argomento della SUM
funzione e quindi non è raggruppata.
SELECT salesid, listid, sum(qtysold) FROM sales GROUP BY ALL;
salesid | listid | sum --------+---------+------ 33095 | 36572 | 2 88268 | 100813 | 4 110917 | 127048 | 1 ...
La seguente query di esempio esclude diverse colonne nell'elenco SELECT, pertanto GROUP BY ALL raggruppa solo salesid e listid.
SELECT * EXCLUDE sellerid, buyerid, eventid, dateid, qtysold, pricepaid, commission, saletime FROM sales GROUP BY ALL;
salesid | listid --------+--------- 33095 | 36572 88268 | 100813 110917 | 127048 ...