Maison >base de données >tutoriel mysql >Pourquoi 'sélectionner * parmi le personnel où salaire > moyenne (salaire);' Échouer, et comment puis-je trouver correctement le personnel gagnant un salaire supérieur à la moyenne ?

Pourquoi 'sélectionner * parmi le personnel où salaire > moyenne (salaire);' Échouer, et comment puis-je trouver correctement le personnel gagnant un salaire supérieur à la moyenne ?

DDD
DDDoriginal
2024-12-24 22:47:15355parcourir

Why Does 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!

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