Maison >base de données >tutoriel mysql >Pourquoi « sélectionner* parmi le personnel où salaire > moyenne (salaire) » renvoie-t-il « ERREUR 1111 (HY000) : utilisation non valide de la fonction de groupe » ?

Pourquoi « sélectionner* parmi le personnel où salaire > moyenne (salaire) » renvoie-t-il « ERREUR 1111 (HY000) : utilisation non valide de la fonction de groupe » ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-24 07:47:36262parcourir

Why Does avg(salary)" Return "ERREUR 1111 (HY000) : Utilisation non valide de la fonction de groupe" ? " /> avg(salary)" Renvoie "ERREUR 1111 (HY000) : Utilisation non valide de la fonction de groupe" ? " />

Dépannage « ERREUR 1111 (HY000) : utilisation non valide de la fonction de groupe »

Tentative de répertorier le personnel gagnant un salaire supérieur au salaire moyen à l'aide du requête "sélectionner* parmi le personnel dont le salaire > avg(salary)" renvoie "ERREUR 1111 (HY000) : utilisation non valide de la fonction de groupe". Ce problème survient en raison d'une utilisation incorrecte d'une fonction d'agrégation dans la clause WHERE.

Résolution de l'erreur< ;/h3>

Une fonction d'agrégation, telle que AVG() dans ce cas, ne peut pas être utilisée dans le WHERE sauf si des conditions spécifiques sont remplies. Selon les normes SQL, les agrégats peuvent apparaître dans la clause WHERE s'ils sont utilisés dans une sous-requête avec une clause HAVING ou une liste de sélection, et la colonne agrégée est une référence externe.

Utilisation de la sous-requête de la clause WHERE

Pour résoudre l'erreur, réécrivez la requête à l'aide d'une sous-requête dans la clause WHERE :

select *
from staff
where salary > (select avg(salary) from staff)

Cette requête utilise une sous-requête pour calculer le salaire moyen, qui est ensuite comparé au salaire de chaque membre du personnel.

Utilisation de la clause HAVING Clause

Vous pouvez également envisager d'utiliser la clause HAVING pour filtrer l'agrégat data :

select deptid,COUNT(*) as TotalCount
from staff
group by deptid
having count(*) > 2

La clause HAVING dans cette requête restreint les résultats aux départements comptant plus de deux membres du personnel.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn