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.