Database
 sql >> Base de données >  >> RDS >> Database

Comment grouper par deux colonnes en SQL

Problème :

Vous souhaitez regrouper vos données en deux colonnes afin de pouvoir comptabiliser certaines statistiques.

Exemple :

Dans la order table, vous avez les colonnes order_date , product_id , customer_id , et number . Vous souhaitez compter le nombre de produits achetés par chaque client chaque jour.

La order le tableau ressemble à ceci :

order_date product_id id_client numéro
2020-11-25 7 1 1
2020-11-25 12 1 3
2020-11-26 53 1 2
2020-11-26 1 2 4
2020-11-26 3 2 1
2020-11-26 16 2 7
2020-11-26 3 3 2
2020-11-27 6 3 1

Solution :

SELECT
  order_date,
  customer_id,
  SUM(number) AS products_number
FROM order

Le résultat est :

order_date id_client products_number
2020-11-26 3 2
2020-11-27 3 1
2020-11-26 2 12
2020-11-25 1 4
2020-11-26 1 2

Discussion :

Pour grouper par deux colonnes, utilisez simplement GROUP BY avec deux colonnes. Les noms de colonne doivent être listés après le GROUP BY mot clé et séparés par une virgule. Des groupes seront créés en fonction des valeurs des deux colonnes ; pour chaque paire de valeurs, un groupe distinct est créé (par exemple, ('2020-11-25', 1) ). Regardez le tableau ci-dessous, où chaque groupe est présenté dans une couleur différente :

order_date id_client product_id numéro
2020-11-25 1 7 1
2020-11-25 1 12 3
2020-11-26 1 53 2
2020-11-26 2 1 4
2020-11-26 2 3 1
2020-11-26 2 16 7
2020-11-26 3 3 2
2020-11-27 3 6 1

Si une ou les deux colonnes ont NULL valeurs, ces valeurs sont traitées comme un groupe séparé (par exemple, ('2020-11-26', NULL) , (NULL, 5) ou (NULL, NULL) ).

Par contre, s'il y a des NULLs dans une colonne sur laquelle on applique une fonction d'agrégation, le NULL les valeurs sont simplement omises. (Dans cet exemple, la fonction d'agrégation est SUM() et la colonne est number ). Si nous avions les valeurs numériques 2 , 1 , et NULL pour l'un des groupes, le SUM(number) serait égal à 3 (2 et 1 sont additionnés, et NULL est omis.)

De même, vous pouvez grouper par n'importe quel nombre de colonnes - écrivez simplement les noms de colonne dans le GROUP BY clause et séparez-les par des virgules.