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.