Grouper par plusieurs colonnes dans MySQL
Dans ce tutoriel, nous visons à comprendre comment utiliser la commande GROUP BY
avec deux colonnes ou plus.
La commande MySQL GROUP BY
est une technique qui permet de regrouper des enregistrements avec des valeurs identiques en fonction de critères particuliers définis dans le but de les regrouper. Lorsque l’on essaie de regrouper des données en ne considérant qu’une seule colonne, tous les enregistrements qui possèdent les mêmes valeurs sur lesquelles le critère est défini sont couplés ensemble dans une seule sortie.
Cependant, MySQL permet aux utilisateurs de regrouper les données non seulement avec une seule colonne à considérer, mais également avec plusieurs colonnes. Nous allons explorer cette technique dans la dernière section de ce tutoriel. Pour résumer, lorsque nous essayons de regrouper en considérant plusieurs colonnes, nous pouvons obtenir un résultat dans lequel le regroupement des valeurs de colonne se fait concernant plus d’une colonne avec un critère de regroupement.
Bien que ce concept puisse sembler difficile à mettre en œuvre, commençons par considérer une colonne dans notre instruction GROUP BY
.
Cependant, avant de commencer, nous créons un jeu de données factice avec lequel travailler. Ici, nous créons un tableau, student_details
, avec quelques lignes dedans.
-- create the table student_details
CREATE TABLE student_details(
stu_id int,
stu_firstName varchar(255) DEFAULT NULL,
stu_grade int,
stu_lastName varchar(255) DEFAULT NULL,
primary key(stu_id)
);
-- insert rows to the table student_details
INSERT INTO student_details(stu_id,stu_firstName,stu_grade,stu_lastName)
VALUES(1,"Preet",40,"Sanghavi"),
(2,"Rich",50,"John"),
(3,"Veron",60,"Brow"),
(4,"Geo",70,"Jos"),
(5,"Hash",80,"Shah"),
(6,"Sachin",90,"Parker"),
(7,"David",25,"Miller"),
(8,"Richa",50,"Joh"),
(9,"Verona",60,"Brow"),
(10,"Geoa",70,"Josh"),
(11,"Hasha",80,"Ash"),
(12,"Allen",90,"Parker");
La requête ci-dessus crée un tableau avec des lignes contenant le prénom et le nom de l’étudiant. Afin de visualiser les entrées dans les données, nous utilisons le code suivant :
SELECT * FROM student_details;
Le code ci-dessus donnerait la sortie suivante :
stu_id stu_firstName stu_grade stu_lastName
1 Preet 40 Sanghavi
2 Rich 50 John
3 Veron 60 Brow
4 Geo 70 Jos
5 Hash 80 Shah
6 Sachin 90 Parker
7 David 25 Miller
8 Richa 50 Joh
9 Verona 60 Brow
10 Geoa 70 Josh
11 Hasha 80 Ash
12 Allen 90 Parker
Essayons maintenant de comprendre l’utilisation d’une simple instruction GROUP BY
pour grouper stu_lastName
avec la somme de stu_grade
comme clause d’agrégation.
L’instruction Group By
dans MySQL
Comme nous le savons, l’instruction GROUP BY
nous aide à regrouper les enregistrements qui possèdent les mêmes valeurs pour les critères définis. La syntaxe de base de l’instruction GROUP BY
est la suivante :
SELECT col_a, col_b, aggregate_function(col_c)
FROM tab_name
WHERE condition GROUP BY criteria_col_1;
On peut trouver la somme des scores des élèves du même nom de famille comme suit :
SELECT SUM(stu_grade), stu_lastName FROM student_details
GROUP BY stu_lastName;
Le code susmentionné donne la sortie suivante :
SUM(stu_grade) stu_lastName
40 Sanghavi
50 John
120 Brow
70 Jos
80 Shah
180 Parker
25 Miller
50 Joh
70 Josh
80 Ash
L’instruction GROUP BY
dans MySQL avec plusieurs colonnes
Comme vu ci-dessus, MySQL fournit la fonctionnalité pour regrouper les enregistrements en fonction d’un critère. Un autre ajout à cette méthode est que nous pouvons regrouper plusieurs colonnes de la table à la fois. La syntaxe pour regrouper plus d’une colonne dans MySQL peut être écrite comme suit :
SELECT col_a, col_b, aggregate_function(col_c)
FROM tab_name
WHERE condition GROUP BY criteria_col_1, criteria_col_2, criteria_col_3;
Comme nous pouvons le voir ci-dessus, criteria_col_1
, criteria_col_2
et criteria_col_3
sont les trois colonnes incluses dans la clause GROUP BY
.
Essayons maintenant de regrouper les prénoms et les noms des étudiants en fonction de la somme de leurs notes en tant que fonction d’agrégation. Nous pouvons effectuer cette opération avec le code suivant :
SELECT SUM(stu_grade), stu_lastName, stu_firstName
FROM student_details
GROUP BY stu_lastName, stu_firstName;
La sortie du code ci-dessus est la suivante :
SUM(stu_grade) stu_lastName stu_firstName
40 Sanghavi Preet
50 John Rich
60 Brow Veron
70 Jos Geo
80 Shah Hash
90 Parker Sachin
25 Miller David
50 Joh Richa
60 Brow Verona
70 Josh Geoa
80 Ash Hasha
90 Parker Allen
Comme nous pouvons le voir, la sortie regroupe à la fois les colonnes stu_firstName
et stu_lastName
. De même, nous pouvons regrouper plusieurs colonnes dans MySQL. Par conséquent, l’instruction GROUP BY
peut être utilisée efficacement avec une ou plusieurs colonnes avec les méthodes mentionnées ci-dessus.