Skip to content

Fonctions d'agrégation SQL expliquées

Les fonctions d'agrégation SQL, GROUP BY, HAVING et les agrégats distincts/avancés, associés à leurs valeurs de retour et à des exemples en une ligne sur une table orders.

Les fonctions d'agrégation ramènent plusieurs lignes à un résultat scalaire unique. GROUP BY partitionne les lignes par clé avant l'agrégation. HAVING filtre les groupes après l'agrégation. Les entrées NULL sont ignorées par tous les agrégats, sauf COUNT(*).

Tableau de référence · 29 entrées
29 of 29 rows
Scalaire
Nombre de valeurs d'entrée non nulles ; COUNT(*) compte toutes les lignes.SELECT COUNT(*) FROM orders
Somme des valeurs numériques non nulles. Renvoie NULL sur un ensemble vide.SELECT SUM(total) FROM orders
Moyenne arithmétique des valeurs numériques non nulles. Les entrées NULL sont ignorées.SELECT AVG(total) FROM orders
Plus petite valeur non nulle, pour tout type comparable.SELECT MIN(total) FROM orders
Plus grande valeur non nulle, pour tout type comparable.SELECT MAX(total) FROM orders
Regroupement
Partitionne les lignes d'entrée par clé ; les agrégats s'exécutent par partition.SELECT user_id, SUM(total) FROM orders GROUP BY user_id
Prédicat évalué par groupe après l'agrégation. Remplace WHERE pour les agrégats.SELECT user_id, COUNT(*) FROM orders GROUP BY user_id HAVING COUNT(*) > 5
Plusieurs agrégats calculés par groupe en une seule passe.SELECT user_id, COUNT(*), SUM(total), AVG(total) FROM orders GROUP BY user_id
Calcule plusieurs regroupements dans une seule instruction ; les clés hors du jeu courant renvoient NULL.SELECT user_id, region, SUM(total) FROM orders GROUP BY GROUPING SETS ((user_id), (region), ())
Raccourci pour des jeux de regroupement fondés sur une hiérarchie ; ajoute des sous-totaux et un total général.SELECT region, user_id, SUM(total) FROM orders GROUP BY ROLLUP (region, user_id)
Raccourci pour toutes les combinaisons des clés listées sous forme de jeux de regroupement.SELECT region, user_id, SUM(total) FROM orders GROUP BY CUBE (region, user_id)
Mêle des clés de groupe simples et des jeux de regroupement dans une seule clause.SELECT user_id, region, SUM(total) FROM orders GROUP BY user_id, GROUPING SETS ((region), ())
Conserve la première ligne par clé selon l'ordre de tri. Extension Postgres.SELECT DISTINCT ON (user_id) user_id, total FROM orders ORDER BY user_id, created_at DESC
Distinct et avancé
Nombre de valeurs uniques non nulles. Déduplique d'abord.SELECT COUNT(DISTINCT user_id) FROM orders
Estime le nombre de valeurs distinctes avec une erreur bornée ; conçu pour les gros volumes.SELECT APPROX_COUNT_DISTINCT(user_id) FROM orders
Concatène des chaînes non nulles avec un délimiteur.SELECT STRING_AGG(user_id::text, ',') FROM orders
Concatène des chaînes non nulles ; le nom MySQL de STRING_AGG.SELECT GROUP_CONCAT(user_id SEPARATOR ',') FROM orders
Collecte les valeurs d'entrée non nulles dans un tableau.SELECT ARRAY_AGG(total) FROM orders
Collecte les lignes d'entrée dans un tableau JSON ; la forme JSONB stocke du binaire analysé.SELECT JSONB_AGG(user_id) FROM orders
TRUE quand chaque valeur d'entrée non nulle est vraie / quand au moins une l'est.SELECT BOOL_AND(total > 0), BOOL_OR(total > 100) FROM orders
Alias standard de BOOL_AND.SELECT EVERY(total > 0) FROM orders
Percentile interpolé / de rang le plus proche sur l'entrée triée ; exige WITHIN GROUP.SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY total) FROM orders
Valeur d'entrée la plus fréquente ; un agrégat de jeu ordonné dans Postgres.SELECT MODE() WITHIN GROUP (ORDER BY total) FROM orders
Transmet l'ordre de tri aux agrégats de jeu ordonné et hypothétiques.SELECT RANK(500) WITHIN GROUP (ORDER BY total) FROM orders
Restreint l'agrégat aux lignes qui passent la condition.SELECT COUNT(*) FILTER (WHERE total > 100) FROM orders
Trie les valeurs avant leur concaténation ou leur collecte par l'agrégat.SELECT STRING_AGG(user_id::text, ',' ORDER BY user_id) FROM orders
COUNT(*) et COUNT(1) comptent chaque ligne ; COUNT(col) ignore les entrées NULL.SELECT COUNT(*), COUNT(total), COUNT(1) FROM orders
Écart-type d'échantillon des valeurs numériques non nulles. STDDEV_POP donne la forme population ; le comportement du nom nu varie selon le moteur.SELECT STDDEV(total) FROM orders
Variance d'échantillon des valeurs numériques non nulles (carré de STDDEV). VAR_SAMP et VAR_POP nomment chaque forme.SELECT VARIANCE(total) FROM orders