Database
 sql >> Base de données >  >> RDS >> Database

Comment filtrer les enregistrements avec la fonction d'agrégation COUNT

Problème :

Vous souhaitez rechercher des groupes de lignes avec un nombre spécifique d'entrées dans un groupe.

Exemple :

Notre base de données a une table nommée product avec des données dans les colonnes suivantes :id , name et category .

identifiant nom catégorie
1 canapé meubles
2 gants vêtements
3 T-shirt vêtements
4 chaise meubles
5 bureau meubles
6 regarder électronique
7 fauteuil meubles
8 jupe vêtements
9 récepteur radio électronique

Trouvons la catégorie de produits avec plus de deux entrées.

Solution :

SELECT category, COUNT(id)
FROM product
GROUP BY category
HAVING COUNT(id)>2;

Voici les résultats :

catégorie compter
meubles 4
vêtements 3

Discussion :

Pour filtrer les enregistrements en fonction du nombre donné de lignes dans le groupe, utilisez la clause HAVING. Il filtre les lignes à l'aide d'une fonction d'agrégation de condition telle que COUNT. Tout d'abord, dans SELECT, utilisez le nom d'une ou plusieurs colonnes pour regrouper les lignes (il s'agit d'une catégorie dans notre exemple), puis placez la fonction d'agrégation COUNT, qui compte le nombre d'enregistrements dans chaque groupe. Pour compter le nombre de lignes, utilisez la colonne id qui stocke des valeurs uniques (dans notre exemple, nous utilisons COUNT(id) ). Ensuite, utilisez la clause GROUP BY pour regrouper les enregistrements en colonnes (la clause GROUP BY catégorie ci-dessus). Après avoir utilisé GROUP BY pour filtrer les enregistrements avec des fonctions d'agrégation telles que COUNT, utilisez la clause HAVING. Il est toujours utilisé après la clause GROUP BY. Dans HAVING, nous utilisons une condition pour comparer une valeur avec celle renvoyée par la fonction d'agrégation. Dans l'exemple, nous comparons si COUNT(id) renvoie une valeur supérieure à deux. Si vrai, la catégorie est renvoyée avec le nombre de produits.