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
Libérer: 2024-12-24 22:47:15
original
315 Les gens l'ont consulté

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);
Copier après la connexion

é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)
Copier après la connexion

Utilisation d'une clause HAVING :

select deptid,COUNT(*) as TotalCount
from staff
group by deptid
having count(*) > 2
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal