top of page

COALESCE et GROUP BY : deux alliés indispensables pour analyser des données propres

  • 13 mai
  • 3 min de lecture

Vous avez des valeurs NULL qui s'invitent dans vos résultats ? Des requêtes d'agrégation qui plantent parce qu'il manque une ligne ? Dans cet article, on s'attaque à deux problèmes très concrets que l'on rencontre dès que l'on commence à travailler sur de vraies données : gérer les valeurs manquantes avec COALESCE, et regrouper intelligemment avec GROUP BY.



Le problème des valeurs NULL en SQL


En SQL, NULL ne signifie pas zéro, ni une chaîne vide. NULL, c'est l'absence de valeur. Et cette subtilité peut causer des comportements surprenants : des calculs faussés, des lignes qui disparaissent des résultats, des affichages peu lisibles dans vos exports ou dashboards.


À vous de jouer : quelle fonction se cache derrière les "???" ?



COALESCE : remplacer les NULL par une valeur par défaut


C'est là qu'intervient COALESCE. Cette fonction prend plusieurs arguments et retourne le premier qui n'est pas NULL.


Syntaxe :

COALESCE(valeur1, valeur2, valeur3, ...)

Exemple classique : remplacer les emails manquants par la chaîne 'Inconnu'.

SELECT nom,
COALESCE(email, 'Inconnu') AS email
FROM clients;

Si le champ email contient NULL pour un client donné, COALESCE retourne 'Inconnu' à la place. Si l'email est renseigné, c'est sa valeur qui est retournée normalement.



Cas d'usage courants de COALESCE


COALESCE est une fonction de data cleaning par excellence. On la retrouve dans de nombreux contextes :


1. Affichage propre


Éviter d'afficher NULL dans un rapport ou un dashboard, en le remplaçant par une valeur lisible comme 'Non renseigné', 'N/A' ou 0.


SELECT nom,
       COALESCE(telephone, 'Non renseigné') AS telephone,
       COALESCE(chiffre_affaires, 0) AS chiffre_affaires
FROM clients;

2. Priorité entre plusieurs colonnes


COALESCE est aussi très utile quand vous avez plusieurs colonnes qui peuvent contenir l'information, et que vous voulez prendre la première disponible.


-- Prendre le téléphone mobile en priorité, sinon le fixe, sinon 'Indisponible'
SELECT nom,
       COALESCE(tel_mobile, tel_fixe, 'Indisponible') AS telephone_contact
FROM clients;

3. Éviter les erreurs dans les calculs


Les opérations arithmétiques sur NULL renvoient NULL. COALESCE permet de neutraliser ce comportement.


-- Sans COALESCE, si remise est NULL, le calcul entier devient NULL
SELECT nom,
       prix * (1 - COALESCE(remise, 0)) AS prix_final
FROM produits;


GROUP BY : regrouper pour analyser


Quelle ligne manque-t-il à cette requête ?



Une fois vos données nettoyées, l'étape suivante est souvent de les agréger : compter, sommer, faire des moyennes par catégorie. C'est le rôle de GROUP BY.


Le défi classique : compter par groupe


Supposons que vous vouliez savoir combien de clients vous avez dans chaque pays.

SELECT pays, COUNT(*)
FROM clients
GROUP BY pays;

La ligne GROUP BY pays est indispensable ici. Sans elle, SQL ne sait pas comment regrouper les lignes et retournera une erreur.

La règle d'or : toute colonne présente dans le SELECT qui n'est pas dans une fonction d'agrégation doit être dans le GROUP BY.



Combiner COALESCE et GROUP BY


Ces deux outils se complètent parfaitement. Imaginez que vous voulez compter vos clients par pays, mais que certains clients n'ont pas de pays renseigné. Sans précaution, ces clients sont regroupés dans un groupe NULL, ce qui peut être difficile à interpréter.


SELECT COALESCE(pays, 'Pays inconnu') AS pays,
       COUNT(*) AS nombre_clients
FROM clients
GROUP BY COALESCE(pays, 'Pays inconnu');

Ici, COALESCE est appliqué avant le regroupement, ce qui permet de rassembler tous les clients sans pays dans un groupe nommé 'Pays inconnu' plutôt qu'un groupe NULL.



Récapitulatif

Fonction / Clause

Rôle

Cas d'usage typique

COALESCE

Remplacer NULL par une valeur de secours

Data cleaning, calculs, affichage

GROUP BY

Regrouper les lignes pour agrégation

Statistiques par catégorie


À retenir :

  • COALESCE est indispensable dès que vous manipulez des données réelles, rarement parfaites.

  • GROUP BY est obligatoire dès que vous mélangez colonnes simples et fonctions d'agrégation.

  • Les deux se combinent naturellement quand vos colonnes de regroupement contiennent des valeurs manquantes.

 
 
 

Commentaires


bottom of page