Database
 sql >> Database >  >> RDS >> Database

Come raggruppare per due colonne in SQL

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.