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
Libérer: 2025-01-23 01:07:11
original
907 Les gens l'ont consulté

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

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

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal