Aller au contenu
Agrégations

COUNT & GROUP BY

GROUP BY range les lignes en groupes selon une ou plusieurs colonnes, puis COUNT, SUM ou AVG calculent une valeur par groupe. On obtient un tableau de synthèse, une ligne par groupe.

  • compter
  • grouper
  • agrégat
  • COUNT DISTINCT

Syntaxe

Modèle
SELECT col_groupe, COUNT(*) AS nbFROM tableGROUP BY col_groupe;

Exemple

Exemple concret
SELECT status, COUNT(*) AS nb_commandesFROM ordersGROUP BY statusORDER BY nb_commandes DESC, status;-- Jeu de données : boutique-- Résultat attendu :-- livré | 3-- annulé | 1-- en cours | 1

À retenir

  1. COUNT(*) compte les lignes, COUNT(col) ignore les NULL de cette colonne, COUNT(DISTINCT col) compte les valeurs différentes.
  2. GROUP BY peut porter sur plusieurs colonnes (GROUP BY city, status) : un groupe par combinaison existante.
  3. Les lignes où la colonne de regroupement vaut NULL forment un groupe à part entière.
  4. Piège : SQLite accepte une colonne qui n'est ni dans GROUP BY ni dans un agrégat (SELECT status, order_date … GROUP BY status) et renvoie alors une valeur prise dans une ligne quelconque du groupe. PostgreSQL et SQL Server refusent la requête. Ne dépendez jamais de ce comportement.

Voir aussi