Clausola GROUP BY - Amazon Redshift

Amazon Redshift non supporterà più la creazione di nuove UDF Python a partire dal 1º novembre 2025. Se desideri utilizzare le UDF Python, creale prima di tale data. Le UDF Python esistenti continueranno a funzionare normalmente. Per ulteriori informazioni, consulta il post del blog.

Clausola GROUP BY

La clausola GROUP BY identifica le colonne di raggruppamento per la query. Viene utilizzata 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 è importante. Il risultato è combinare ogni set di righe con valori comuni in un’unica riga di gruppo che rappresenta tutte le righe del gruppo. Utilizza una clausola GROUP BY per eliminare la ridondanza nell’output e 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 a eccezione di quelle aggregate. Ad esempio, considera la seguente query che raggruppa in base a col1 e col2 senza doverle specificare singolarmente nella clausola GROUP BY. La colonna col3 è l’argomento della funzione SUM e quindi non è raggruppata.

SELECT col1, col2 sum(col3) FROM testtable GROUP BY ALL

Se ESCLUDI una colonna nell’elenco SELECT, la clausola GROUP BY ALL non raggruppa i risultati in base a tale colonna specifica.

SELECT * EXCLUDE col3 FROM testtable GROUP BY ALL
aggregation_extension

È 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 informazioni sulla tabella SALES, consulta Database di esempio.

La query di esempio seguente raggruppa i gruppi in base a salesid e listid senza doverli specificare singolarmente nella clausola GROUP BY. La colonna qtysold è l’argomento della funzione SUM 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 query di esempio seguente 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 ...