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 » ?
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" ? " />
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.
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.
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.
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!