avg(salary);" Échec, et comment puis-je trouver correctement le personnel gagnant un salaire supérieur à la moyenne ? " /> moy(salaire);" Échouer, et comment puis-je trouver correctement le personnel gagnant un salaire supérieur à la moyenne ? " />
Un examen approfondi de « ERREUR 1111 (HY000) : Utilisation invalide de la fonction de groupe »
Cette requête vise à identifier les membres du personnel qui gagnent plus que le salaire moyen dans un tableau du personnel contenant des attributs tels que ec, nom, code, dob et salaire. solution :
select* from staff where salary > avg(salary);
échoue en raison d'une utilisation non valide de la fonction de groupe dans la clause WHERE. Les fonctions d'agrégation, telles que AVG, ne peuvent pas être utilisées directement dans les clauses WHERE à moins qu'elles ne soient contenues dans une sous-requête au sein d'un HAVING. clause ou une liste de sélection, et la colonne en cours d'agrégation est une référence externe.
Correct Approches :
Utilisation d'une sous-requête dans la clause WHERE :
select * from staff where salary > (select avg(salary) from staff)
Utilisation d'une clause HAVING :
select deptid,COUNT(*) as TotalCount from staff group by deptid having count(*) > 2
La clause HAVING permet un filtrage basé sur des valeurs de groupe ou d'agrégation, et elle se comporte de la même manière que une clause WHERE dans les cas sans GROUP BY. En déplaçant la fonction d'agrégation vers la clause HAVING, la requête identifie correctement les membres du personnel dont le salaire dépasse la moyenne.
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!