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

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

Problème :

Vous souhaitez rechercher des groupes de lignes dans lesquels la moyenne des valeurs d'une colonne est supérieure ou inférieure à une valeur donnée.

Exemple :

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

identifiant nom épicerie prix
1 lait Boutique verte 2.34
2 pain Épicerie Clarks 3.56
3 pain Supermarché 4.15
4 lait Supermarché 1.80
5 pain Épicerie Amanda 2.26
6 lait Épicerie Violette 3.45
7 lait Épicerie Clarks 2.10
8 pain Épicerie Violette 2,55
9 lait Épicerie Amanda 1,95

Trouvons les noms des produits dans lesquels le prix moyen de chaque produit parmi les produits d'épicerie est supérieur à 3,00.

Solution :

SELECT name, AVG(price)
FROM product
GROUP BY name
HAVING AVG(price)>3.00;

Voici le résultat :

nom moy
pain 3.13

Discussion :

Pour filtrer les enregistrements à l'aide de la fonction d'agrégation, utilisez la clause HAVING.

Ici, nous calculons la valeur agrégée :le prix moyen de chaque produit. L'un est vendu par plus d'un épicier; donc le prix moyen est calculé pour chacun (dans notre exemple, SELECT name, AVG(price) ). Outre la fonction d'agrégation, nous utilisons également le nom de la colonne dans SELECT, nous devons donc utiliser GROUP BY avec ce nom de colonne (GROUP BY name ).

La dernière étape consiste à utiliser la fonction d'agrégation dans la clause HAVING. N'oubliez pas que HAVING doit être placé après la clause GROUP BY. Il contient la condition qui compare la valeur renvoyée par la fonction d'agrégation avec une valeur donnée. Ci-dessus, c'est le prix moyen du produit avec une valeur de 3,00 (HAVING AVG(price)>3.00 ). Dans cette requête, nous vérifions si le prix moyen de chaque produit dans toutes les épiceries est supérieur à trois. La requête n'affichait qu'un seul produit, le pain, avec un prix moyen supérieur à trois.