Maison >base de données >tutoriel mysql >Pourquoi ma requête SQL génère-t-elle une erreur « Colonne non incluse dans l'agrégat ou dans la clause Group By » ?

Pourquoi ma requête SQL génère-t-elle une erreur « Colonne non incluse dans l'agrégat ou dans la clause Group By » ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-23 01:26:09345parcourir

Why Does My SQL Query Produce a

Dépannage de l'erreur SQL « Colonne non agrégée ou groupée par clause »

Ce guide traite de l'erreur SQL courante : "La colonne 'Employee.EmpID' n'est pas valide dans la liste de sélection car elle n'est contenue ni dans une fonction d'agrégation ni dans la clause GROUP BY." Cette erreur se produit lorsque votre instruction SELECT inclut une colonne qui n'est ni agrégée ni faisant partie de la clause GROUP BY.

Comprendre les fonctions d'agrégation et GROUP BY

Une clause GROUP BY regroupe les lignes avec des valeurs identiques dans les colonnes spécifiées. Pour afficher les données de ces groupes, vous utilisez généralement des fonctions d'agrégation telles que SUM, COUNT, AVG, MIN ou MAX. Ces fonctions calculent des valeurs récapitulatives pour chaque groupe.

La règle de la valeur unique

La règle de valeur unique de SQL stipule que toute colonne non agrégée de la liste SELECT doit avoir une valeur unique et cohérente au sein de chaque groupe. Si une colonne non agrégée contient plusieurs valeurs par groupe, la requête est ambiguë, car SQL ne peut pas déterminer quelle valeur renvoyer.

Résoudre l'erreur

Disons que votre objectif est de répertorier les identifiants d'emplacement et le nombre d'employés à chaque emplacement. La requête corrigée utilise la COUNT fonction d'agrégation :

<code class="language-sql">SELECT loc.LocationID, COUNT(emp.EmpID) AS EmployeeCount
FROM Employee AS emp
FULL JOIN Location AS loc ON emp.LocationID = loc.LocationID
GROUP BY loc.LocationID;</code>

COUNT(emp.EmpID) calcule le nombre d'employés pour chaque LocationID. Cela garantit une seule EmployeeCount valeur par groupe, satisfaisant la règle de la valeur unique et éliminant l'erreur. La clause GROUP BY loc.LocationID regroupe les résultats par emplacement.

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