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