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!