SQL : la commande GROUP BY
Apprenez à utiliser la commande SQL GROUP BY avec des exemples concrets !
La requête SQL GROUP BY permet d’agréger une colonne 1 d’une table selon une ou plusieurs autres colonnes. Elle crée de nouvelles valeurs à partir de cette colonne 1 en la regroupant suivant une fonction agrégative (somme, moyenne etc.). Concrètement, si vous disposez d’une base de données répertoriant les victoires de l’Eurovision, la commande GROUP BY permet de grouper les lignes de la table par pays pour compter leur nombre de victoires (promis, l’Eurovision est le meilleur exemple qui soit !) Découvrons sans plus tarder la commande GROUP BY en utilisant en exemple une base de données contenant les victoires de l’Eurovision que vous pouvez télécharger.
Syntaxe SQL
En gros, pour faire très simple - le langage SQL est un langage de programmation qui permet de faire parler une base de données.
Comme pour un jeu de construction, il fonctionne en utilisant des briques (les commandes), comme GROUP BY présenté ici. Quasi un Lego pour adultes en ligne !
Un peu de théorie pour bien comprendre les bases
La commande GROUP BY est utilisée selon la syntaxe générale suivante :
Attention ici à bien afficher la colonne1 (après SELECT). Sinon l’agrégation n’aura pas de légende et vous ne saurez pas à quoi correspondent les valeurs affichées.
Quelques précisions aussi sur les commandes et variables impliquées :
- SELECT permet d’afficher les colonnes listées après SELECT.
- FROM précise de quelle table les colonnes sont extraites.
- tableau est la table de données.
- colonne1 est la colonne selon laquelle on veut grouper.
- colonne2 est la colonne dont on veut grouper les valeurs.
- FONCTION est la fonction agrégative choisie.
Qu’est-ce qu’une fonction agrégative ?
La commande GROUP BY s’accompagne toujours d’une fonction agrégative. Mais quel est ce type de fonction ? On vous explique tout !
Concrètement, c’est une fonction qui prend plusieurs valeurs en entrée et ne donne qu’une seule valeur en sortie.
Pour faire simple, les 5 fonctions agrégatives principales sont :
- COUNT : compte le nombre de lignes (facile)
- SUM : somme de toutes les valeurs d’une colonne (bon, plutôt évident aussi !)
- AVG : calcule la moyenne des valeurs d’une colonne (comme average)
- MIN : indique la valeur minimum d’une colonne (bon, on suppose que vous avez compris !)
MAX : indique la valeur maximum d’une colonne
Mise en pratique de SQL GROUP BY
Maintenant, place à la partie la plus intéressante !
Mettons ensemble toute cette théorie en pratique. Prenons l’exemple mentionné en introduction de cet article : l’Eurovision !
On possède une table Eurovision regroupant différentes informations sur les victoires de l’Eurovision selon les 5 colonnes suivantes : date, score obtenu, pays du vainqueur, nom du vainqueur, titre de la chanson.
On souhaite connaître le nombre de victoires Eurovision et le score moyen par pays. Qui ne voudrait pas connaître cette information CAPITALE ?
Application de la syntaxe
Exemple 1 : Compter le nombre de victoires
Pour compter le nombre des victoires, c’est très facile. Surtout, quand on laisse la machine le faire.
Le code suivant permet de compter le nombre de lignes pour chaque pays, et d’agréger les lignes de la table en fonction de la colonne « pays ». Simple, facile et efficace !
Cependant, attention, cela ne suffit pas. En effet, nous n’avons pas demandé d’afficher la colonne « pays ». Ce programme ne nous fournira donc que le nombre de victoires par pays, sans préciser desquels il s’agit :
Vous en conviendrez, cela n’est pas très utile. On doit donc préciser que l’on souhaite afficher la colonne « pays » :
Ouf ! On obtient alors, enfin, la liste des pays ainsi que leur nombre de victoires.
Exemple 2 : Calculer le score moyen par pays
Prenons un autre exemple. On utilise cette fois la fonction agrégative AVG, en l’appliquant à la colonne « score ».
On obtient alors la liste des pays et leur score moyen.
Nommer l’agrégation pour la réutiliser
Nous venons de créer une nouvelle valeur en regroupant une colonne de la table. Pour la réutiliser facilement sans avoir à la calculer de nouveau, il est possible de la nommer.
On peut donc utiliser la commande AS pour préciser le nom de l’agrégation (ici « nombre_victoires ») :
Classer les résultats
Nous avions obtenu un affichage du nombre de victoires par pays.
Mais ne nous arrêtons pas là ! Il peut être utile de trier cette liste afin de connaître les pays les plus performants (et se lamenter sur le score de la France).
Pour ce faire, on ajoute la commande ORDER BY suivie du nom de la valeur selon laquelle on souhaite que les informations soient triées (ici « nombre_victoires »).
Par défaut, la commande ORDER BY présente les valeurs dans l’ordre croissant. Puisque l’on cherche les meilleurs pays, nous devons préciser que le tri doit être décroissant avec l’opérateur DESC :
Grâce à ce programme, nous savons maintenant que les Irlandais sont les champions :
Questions fréquentes sur la commande GROUP BY
Peut-on agréger selon plusieurs colonnes ?
Oui, il est possible de regrouper une colonne selon plusieurs autres colonnes, grâce à la syntaxe suivante.
Par exemple, si nous possédions aussi une colonne précisant la langue des paroles du titre chanté, nous pourrions trier le nombre de victoires par pays et par langue. Plutôt sympa, non ?
Pourquoi utiliser une fonction agrégative seule ne suffit pas ?
Il n’est pas rare d’oublier de renseigner la commande GROUP BY alors que l’on souhaite appliquer une fonction agrégative pour calculer des valeurs selon un regroupement précis.
Cependant, il est absolument nécessaire d’ajouter un GROUP BY, car cela permet de renseigner selon quelle(s) colonne(s) on souhaite que la fonction agrégative soit appliquée. N’utiliser que cette fonction peut induire des incohérences, des doublons, etc.
Ainsi, pour reprendre l’exemple précédemment introduit, si on tente de compter les victoires par pays sans utiliser GROUP BY, la machine somme le nombre de victoires totales et l’attribue à l’Ukraine, premier pays dans la colonne :
Comment insérer d’autres commandes ?
Si vous souhaitez ajouter des conditions et d’autres commandes, il est important de noter que la commande GROUP BY s’utilise après la commande WHERE et avant la commande HAVING.
Par exemple, le programme pour obtenir le nombre de victoires de l’Ukraine seulement sera le suivant :
D’autres questions ? Formez-vous au langage SQL à distance avec DataBird !
À vous de jouer !
Coder en SQL, ça se comprend et ça s’apprend en programmant soi-même. Rien de mieux que de s’essayer soi-même à l’exercice en s’entraînant sur la base des données de l’Eurovision téléchargeable.
Tester vos programmes SQL
Une fois votre programme rédigé, il est temps de le faire tourner sur une machine ! Si vous ne disposez pas d’un logiciel vous permettant de lancer votre programme, nous vous invitons à utiliser la plateforme gratuite en ligne Sqliteonline.
Il vous suffit ensuite de :
- cliquer sur l’icône Import > Open,
- sélectionner le fichier contenant votre base de données – dans notre cas le fichier Eurovision.csv –,
- et cliquer sur Ouvrir.
Avant de finaliser l’importation en cliquant sur ok, veillez à choisir l’option First Line pour le Column name.
Une fois le fichier importé, il ne vous reste plus qu’à taper votre code dans l’onglet ouvert. Pour le tester, vous pouvez cliquer sur l’icône Run, ou utiliser le raccourci Maj + Enter.
{{banniere-article}}
Deux exercices pour maîtriser la commande GROUP BY comme personne !
Exercice 1 : Calculer la date la plus récente à laquelle chaque pays a gagné l’Eurovision.
Exercice 2 : Afficher la liste des pays qui ont gagné depuis 2000 ainsi que leur score moyen. Cet exercice fait appel à la fonction WHERE.
Correction expliquée
Attention, cette partie n’est à lire qu’après avoir rédigé et testé votre programme. Elle présente une solution possible aux énoncés précédents.
Exercice 1
Exercice 2
Et pour aller plus loin sur la commande GROUP BY ?
Vous l’avez sûrement constaté, le langage SQL permet d’interroger des bases de données efficacement. Ce langage n’est pas sorcier, mais peut être compliqué à utiliser, et ça s’apprend !
Chez DataBird, nous pensons cet apprentissage des langages et outils du data analyst doit se faire par la pratique. C’est la raison pour laquelle nous vous proposons de travailler avec de vraies bases de données, de façon concrète et opérationnelle.
Quels que soient vos objectifs, que vous souhaitiez simplement découvrir le langage SQL ou approfondir vos connaissances, nous vous offrons des formations data Analyst complètes et adaptées.
Vous pouvez d’ailleurs bénéficier dès maintenant de notre formation gratuite disponible en ligne !
Conclusion
La commande GROUP BY n’a désormais plus de secret pour vous, et vous pouvez l’intégrer dans vos programmes afin d’agréger certaines valeurs de vos tables.