Problema:
Vuoi raggruppare i tuoi dati in due colonne in modo da poter contare alcune statistiche.
Esempio:
Nel order
tabella, hai le colonne order_date
, product_id
, customer_id
e number
. Vorresti contare il numero di prodotti acquistati da ciascun cliente ogni giorno.
L'order
la tabella si presenta così:
data_ordine | id_prodotto | id_cliente | numero |
---|---|---|---|
25-11-2020 | 7 | 1 | 1 |
25-11-2020 | 12 | 1 | 3 |
26-11-2020 | 53 | 1 | 2 |
26-11-2020 | 1 | 2 | 4 |
26-11-2020 | 3 | 2 | 1 |
26-11-2020 | 16 | 2 | 7 |
26-11-2020 | 3 | 3 | 2 |
27-11-2020 | 6 | 3 | 1 |
Soluzione:
SELECT order_date, customer_id, SUM(number) AS products_number FROM order
Il risultato è:
data_ordine | id_cliente | numero_prodotti |
---|---|---|
26-11-2020 | 3 | 2 |
27-11-2020 | 3 | 1 |
26-11-2020 | 2 | 12 |
25-11-2020 | 1 | 4 |
26-11-2020 | 1 | 2 |
Discussione:
Per raggruppare per due colonne, usa semplicemente GROUP BY
con due colonne. I nomi delle colonne devono essere elencati dopo il GROUP BY
parola chiave e separati da una virgola. I gruppi verranno creati in base ai valori di entrambe le colonne; per ogni coppia di valori viene creato un gruppo separato (ad es. ('2020-11-25', 1)
). Guarda la tabella qui sotto, dove ogni gruppo è presentato in un colore diverso:
data_ordine | id_cliente | id_prodotto | numero |
---|---|---|---|
25-11-2020 | 1 | 7 | 1 |
25-11-2020 | 1 | 12 | 3 |
26-11-2020 | 1 | 53 | 2 |
26-11-2020 | 2 | 1 | 4 |
26-11-2020 | 2 | 3 | 1 |
26-11-2020 | 2 | 16 | 7 |
26-11-2020 | 3 | 3 | 2 |
27-11-2020 | 3 | 6 | 1 |
Se una o entrambe le colonne hanno NULLs
valori, questi valori vengono trattati come un gruppo separato (ad es. ('2020-11-26', NULL)
, (NULL, 5)
o (NULL, NULL)
).
D'altra parte, se sono presenti NULLs
in una colonna su cui applichiamo una funzione aggregata, il NULLs
i valori vengono semplicemente omessi. (In questo esempio, la funzione di aggregazione è SUM()
e la colonna è number
). Se avessimo i valori numerici 2 , 1 e NULL per uno dei gruppi, il SUM(number)
sarebbe uguale a 3
(2
e 1
vengono sommati e NULLs
viene omesso.)
Allo stesso modo, puoi raggruppare per qualsiasi numero di colonne:scrivi semplicemente i nomi delle colonne nel GROUP BY
clausola e separarli con virgole.