Jeudi 10 octobre à 18h30
Découvrez les métiers de la data et comment vous y former

Depuis plus de trois ans, notre objectif est de permettre au plus grand nombre de se former aux métiers de la data, quelque soit votre profil. Cet évènement vous permettra de découvrir nos programmes de formation conçus pour vous permettre de vous reconvertir vers la data ou de monter en compétences !

Je m'inscris
Découvrez les métiers de la data et comment vous y former. Le jeudi 10 octobre à 18h30
Découvrez les métiers de la data et comment vous y former. Le jeudi 10 octobre à 18h30
Découvrez les métiers de la data et comment vous y former. Le jeudi 10 octobre à 18h30
Je m'inscris

SQL : la commande GROUP BY

Apprenez à utiliser la commande SQL GROUP BY avec des exemples concrets !

Mis à jour le
15/5/2024

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 :

SELECT colonne1,FONCTION (colonne2)
FROM tableau
GROUP BY colonne1

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

Comprendre la commande 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.

Année Score Pays Artiste Titre
2022 631 Ukraine Kalush Orchestra Stefania
2021 524 Italt Maneskin Zitti E Buoni
2019 498 Netherlands Duncan Laurence Arcade

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 !

SELECT COUNT(annee)
FROM Eurovision
GROUP BY pays

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 :

Count(année)
2
1
1

Vous en conviendrez, cela n’est pas très utile. On doit donc préciser que l’on souhaite afficher la colonne « pays » :

SELECT pays, COUNT(annee)
FROM Eurovision
GROUP BY pays

Ouf ! On obtient alors, enfin,  la liste des pays ainsi que leur nombre de victoires.

Pays Count(année)
Austria 2
Azerbaijan 1
Belgium 1

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 ».

SELECT pays, AVG(score)
FROM Eurovision
GROUP BY pays

On obtient alors la liste des pays et leur score moyen.

Pays AVG(score)
Austria 160.5
Azerbaijan 221
Belgium 176

Nommer l’agrégation pour la réutiliser

Nommer l’agrégation pour utiliser la commande Group By

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 ») :

SELECT pays, COUNT(annee) AS nombre_victoires
FROM Eurovision
GROUP BY pays

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 :

SELECT pays, COUNT(annee) AS nombre_victoires
FROM Eurovision
GROUP BY pays
ORDER BY nombre_victoires DESC

Grâce à ce programme, nous savons maintenant que les Irlandais sont les champions :

Pays Count(année)
Ireland 7
Sweden 6
United Kingdom 5

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.

SELECT colonne1, colonne2,
FONCTION(colonne3)
FROM tableau
GROUP BY colonne1, colonne2

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 :

SELECT pays, COUNT(annee)
FROM Eurovision
Pays Count(annee)
Ukraine 69

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 :

SELECT pays, COUNT(annee)
FROM Eurovision
WHERE pays = ‘Ukraine’
GROUP BY pays

D’autres questions ? Formez-vous au langage SQL à distance avec DataBird !

À vous de jouer !

S'entraîner sur la commande GROUP BY

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

SELECT pays, MAX(annee)
FROM Eurovision
GROUP BY pays

Exercice 2

SELECT pays, AVG(score)
FROM Eurovision
WHERE annee >= 2000
GROUP BY pays

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.

Faites un premier pas dans la data avec nos cours gratuits
Démarrer
Difficulté :