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.