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

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

Problème :

Vous devez trouver des lignes dans lesquelles les groupes ont une somme de valeurs dans une colonne inférieure à une valeur donnée.

Exemple :

Notre base de données a une table nommée company avec des données dans les colonnes suivantes :id , department , first_name , last_name , et salary .

identifiant département prénom nom_de_famille salaire
1 marketing Lora Marron 2 300
2 finances Jean Jackson 3200
3 marketing Michel Thomson 1270
4 production Tony Miller 6 500
5 production Sally Vert 2 500
6 finances Olivier Noir 3450
7 production Jeniffer Michelin 2800
8 marketing Jérémy Lorson 3600
9 marketing Louis Smith 4200

Trouvons les noms des départements qui ont des sommes de salaires de ses employés inférieures à 7000.

Solution :

SELECT department, SUM(salary)
FROM company
GROUP BY department
HAVING SUM(salary)<7000;

Voici le résultat :

département somme
finances 6550

Discussion :

Pour filtrer les enregistrements à l'aide de la fonction d'agrégation (la fonction SUM précédemment), utilisez la clause HAVING. Pour calculer la somme des valeurs de chaque groupe de lignes, utilisez la fonction d'agrégation SOMME. Dans cette requête, la colonne département est calculée avec la somme de tous les salaires de ses employés en tant que groupe (calculez-la avec la fonction SOMME avec la colonne salaire comme argument). Étant donné que vous calculez la valeur de chaque groupe de lignes (nous regroupons les lignes en fonction du nom du département), la requête contient une clause GROUP BY avec le nom de la colonne pour regrouper les lignes (dans notre exemple, GROUP BY department ). 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. HAVING contient la condition comparant la valeur renvoyée par la fonction d'agrégation à une valeur donnée. D'en haut, ce sont les sommes salariales d'une valeur inférieure à 7000 (SUM(salary)<7000 ). Ici, nous vérifions que la somme des salaires dans chaque département est inférieure à 7 000. La requête n'a affiché qu'un seul département, les finances, avec des salaires de 6 550.