En bref
Les fonctions SQL transforment le langage de simple extracteur de lignes en véritable machine à calculer : au lieu de rapatrier les données pour les traiter ailleurs, on demande à la base de compter, sommer, moyenner, formater et convertir elle-même. Deux grandes familles structurent le sujet. Les fonctions d’agrégation d’abord, COUNT, SUM, AVG, MIN et MAX, qui condensent des milliers de lignes en résultats synthétiques et prennent toute leur puissance avec GROUP BY, le regroupement par catégorie qui fait les rapports et les tableaux de bord. Les fonctions scalaires ensuite, appliquées ligne par ligne : manipulation de texte, majuscules, découpes, concaténations, arithmétique des dates, arrondis et conversions de types, avec une nuance à connaître, leurs noms varient selon les moteurs, PostgreSQL, MySQL ou SQLite ayant chacun leurs dialectes. S’y ajoutent les fonctions fenêtres, l’outil moderne des classements et des cumuls, et les bonnes pratiques de performance, car une fonction mal placée peut priver une requête de ses index.
Une base de données qui ne ferait que stocker serait un entrepôt sans comptable : la vraie puissance de SQL est de calculer sur place, au plus près des données. Les fonctions SQL sont l’outillage de ce calcul, du simple comptage aux classements sophistiqués. Voici le guide pratique complet, en prolongement de comprendre une fonction, du guide apprendre le SQL et du guide complet pour apprendre à coder.
Les agrégations : condenser des milliers de lignes
La famille reine s’appelle l’agrégation, et son principe renverse la logique habituelle des requêtes : au lieu de renvoyer des lignes, elle les condense en un résultat. COUNT compte, SELECT COUNT(*) FROM commandes répondant d’un nombre unique à la question combien ; SUM additionne une colonne, AVG en calcule la moyenne, MIN et MAX en extraient les extrêmes, et ces cinq mousquetaires couvrent l’essentiel des questions qu’un métier pose à ses données, combien de clients, quel chiffre d’affaires, quel panier moyen, quelle commande record. Deux subtilités méritent d’être apprises tôt, car elles évitent des rapports faux. La première concerne les valeurs absentes : les agrégations ignorent les valeurs NULL, ce qui est généralement souhaitable, une moyenne de notes ne comptant pas les absents, mais doit être su, COUNT d’une colonne ne comptant que les lignes renseignées quand COUNT étoile compte tout. La seconde concerne les doublons : COUNT DISTINCT compte les valeurs différentes, la nuance entre nombre de commandes et nombre de clients ayant commandé tenant tout entière dans ce mot-clé.
L’agrégation prend sa vraie dimension avec GROUP BY, le regroupement qui transforme une question globale en tableau de synthèse : SELECT pays, COUNT(*) FROM clients GROUP BY pays ne rend plus un nombre mais une ligne par pays, chaque agrégat calculé au sein de son groupe, et c’est très exactement la mécanique de tous les rapports, ventes par mois, inscriptions par formation, erreurs par service. La règle d’or qui déroute chaque débutant mérite son encadré : toute colonne du SELECT doit être soit agrégée, soit présente dans le GROUP BY, car on ne peut afficher à la fois le détail et la synthèse ; le moteur le rappelle sans pitié, et comprendre pourquoi, chaque ligne résultat représentant un groupe entier, est un vrai jalon de maîtrise. Le filtrage des groupes, enfin, a son mot-clé dédié : WHERE filtre les lignes avant regroupement, HAVING filtre les groupes après, ne garder que les pays à plus de cent clients relevant du second, une distinction que les exercices SQL corrigés travaillent jusqu’au réflexe, tant elle revient en entretien comme en production.
Les fonctions scalaires : texte, dates, nombres
La seconde famille travaille ligne par ligne : les fonctions scalaires reçoivent une valeur, en rendent une autre, et se glissent partout, dans le SELECT pour formater, dans le WHERE pour comparer, dans le ORDER BY pour trier finement. Le texte d’abord, le quotidien du nettoyage : UPPER et LOWER normalisent la casse, TRIM ôte les espaces parasites, la concaténation assemble prénom et nom, SUBSTRING découpe, REPLACE substitue, LENGTH mesure, et ces gestes simples sauvent les rapprochements de données, deux fichiers clients ne se joignant proprement qu’une fois leurs libellés normalisés. Les dates ensuite, le territoire le plus utile et le plus piégeux : extraire l’année ou le mois d’une date pour regrouper par période, calculer l’écart entre deux dates, ancienneté, délai de livraison, obtenir la date du jour pour les filtres glissants, autant d’opérations dont chaque moteur a sa grammaire. Car c’est la nuance qui surprend en arrivant de langages unifiés : SQL est un standard aux dialectes bien vivants, PostgreSQL, MySQL, SQL Server ou SQLite partageant les concepts mais variant les noms et les syntaxes, la date du jour ou la découpe de chaîne s’écrivant différemment ici et là, d’où le réflexe professionnel numéro un, consulter la documentation de son moteur plutôt que sa mémoire d’un autre.
Les nombres complètent le trio : ROUND arrondit les moyennes trop bavardes, les divisions entières et les modulos servent les découpages, ABS et compagnie couvrent l’arithmétique courante, et les conversions de types, CAST en tête, résolvent les frictions entre texte stocké et nombre attendu, le grand classique des données importées. Deux compagnons transversaux méritent leur place dans la panoplie de base. COALESCE d’abord, le gestionnaire élégant des valeurs absentes : il rend la première valeur non nulle de sa liste, remplaçant d’un geste les NULL par un zéro comptable ou un libellé par défaut, indispensable dès que les données réelles, donc trouées, arrivent. CASE ensuite, la condition au cœur de la requête : CASE WHEN montant > 100 THEN 'premium' ELSE 'standard' END fabrique des catégories à la volée, et son mariage avec GROUP BY, regrouper par tranches qu’on vient de définir, est l’un des motifs les plus productifs du SQL d’analyse, celui qui alimente les segmentations des projets data.
Fenêtres, fonctions maison et bonnes pratiques
Le SQL moderne a ajouté une troisième famille qui change la catégorie de tes analyses : les fonctions fenêtres, reconnaissables à leur clause OVER. Leur idée tient en une phrase, calculer comme une agrégation sans écraser les lignes : là où GROUP BY condense, la fenêtre annote, chaque ligne recevant un calcul effectué sur son voisinage, sa fenêtre. Les usages parlent d’eux-mêmes : ROW_NUMBER et RANK numérotent et classent, le top trois des ventes par région tenant en une requête ; les cumuls, somme courante d’un chiffre d’affaires au fil des mois, s’écrivent en une ligne, tout comme les comparaisons au précédent, LAG ramenant la valeur du mois d’avant pour calculer une progression. Nul besoin d’en faire son premier chapitre : les fenêtres se savourent une fois GROUP BY digéré, mais il faut savoir qu’elles existent, car elles remplacent des pages de code applicatif et brillent en entretien, les tests techniques orientés data en raffolant, précisément parce qu’elles séparent les utilisateurs occasionnels des analystes outillés.
Restent les fonctions qu’on écrit soi-même et la sagesse d’usage. La plupart des moteurs permettent de définir ses propres fonctions, encapsuler un calcul métier récurrent, taxe, barème, formatage maison, pour l’appeler comme une native : c’est utile avec modération, la logique complexe se portant souvent mieux côté application, et c’est surtout une porte d’entrée vers le monde des procédures stockées qu’on croisera en contexte d’entreprise. La sagesse, elle, tient en trois règles de performance et d’honnêteté. Une fonction appliquée à une colonne dans le WHERE peut neutraliser son index, le moteur devant calculer sur chaque ligne avant de comparer : filtrer sur une plage de dates plutôt que sur l’année extraite est le réflexe qui garde les requêtes rapides sur les vraies volumétries d’une base relationnelle. Les calculs lourds répétés se factorisent, sous-requêtes nommées à l’appui, pour la lisibilité autant que la vitesse. Et le résultat se vérifie toujours sur un échantillon connu, car une agrégation fausse a l’air aussi propre qu’une vraie : en SQL comme ailleurs, la fonction calcule, mais c’est toi qui réponds du chiffre, un état d’esprit que les métiers de la data érigent en éthique professionnelle.
Questions fréquentes
Quelles sont les fonctions d’agrégation de base en SQL ?
COUNT compte les lignes, SUM additionne, AVG moyenne, MIN et MAX extraient les extrêmes. Elles condensent des milliers de lignes en résultats synthétiques et prennent toute leur puissance avec GROUP BY, qui calcule ces agrégats par catégorie, la mécanique de tous les rapports.
Quelle est la différence entre WHERE et HAVING ?
WHERE filtre les lignes avant le regroupement, HAVING filtre les groupes après : ne garder que les commandes de 2025 relève de WHERE, ne garder que les pays comptant plus de cent clients relève de HAVING, car la condition porte sur un résultat agrégé.
Pourquoi les fonctions de dates changent-elles selon les bases ?
Parce que SQL est un standard aux dialectes vivants : PostgreSQL, MySQL, SQL Server ou SQLite partagent les concepts mais varient les noms et syntaxes, notamment sur les dates et les chaînes. Le réflexe professionnel est de consulter la documentation de son moteur.
À quoi servent les fonctions fenêtres en SQL ?
À calculer sans écraser les lignes : classements par groupe avec RANK, cumuls courants, comparaisons à la ligne précédente avec LAG, chaque ligne recevant un calcul effectué sur sa fenêtre. Elles remplacent des pages de code applicatif et brillent dans les analyses.
Sources
Cet article a une vocation informative et pédagogique. Les plateformes, outils et formations éventuellement cités le sont à titre d’exemple ; compare plusieurs options avant de t’engager ou de payer.

