Maison >base de données >tutoriel mysql >Pourquoi ma requête SQL SELECT avec GROUP BY renvoie-t-elle une erreur « Colonne invalide » ?

Pourquoi ma requête SQL SELECT avec GROUP BY renvoie-t-elle une erreur « Colonne invalide » ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-23 01:07:11909parcourir

Why Does My SQL SELECT Query with GROUP BY Return an

SQL GROUP BY Erreur de colonne non valide dans la requête

Lors de la sélection de colonnes dans une requête SQL contenant une clause GROUP BY, une erreur peut survenir si la colonne n'est ni incluse dans une fonction d'agrégation ni dans la clause GROUP BY. Cette erreur ressemble généralement à : "La colonne 'Employee.EmpID' n'est pas valide dans la liste de sélection car elle n'est ni incluse dans une fonction d'agrégation ni dans une clause GROUP BY".

La raison en est la règle de la valeur unique. Dans les requêtes GROUP BY, la sortie des colonnes non agrégées doit être unique au sein de chaque groupe. Cependant, la sélection d'une seule colonne sans l'agréger, comme « Employee.EmpID », entraîne des résultats ambigus.

Pour résoudre cette erreur, incluez la colonne dans une clause GROUP BY ou appliquez-lui une fonction d'agrégation. Par exemple, si vous souhaitez calculer le nombre d'employés par emplacement, utilisez la requête suivante :

<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>

Cette requête compte le nombre d'employés sur chaque site tout en fournissant des identifiants de site pour chaque groupe. Alternativement, si vous souhaitez sélectionner toutes les colonnes pour chaque emplacement mais afficher uniquement le dernier identifiant d'employé (valeur maximale), vous pouvez utiliser la fonction d'agrégation MAX :

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

En utilisant des fonctions d'agrégation ou en incluant des colonnes dans une clause GROUP BY, vous pouvez vous assurer que les données récupérées sont sans ambiguïté et respectent les règles à valeur unique.

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