Maison > base de données > tutoriel mysql > Pourquoi ma requête SQL génère-t-elle une erreur « La colonne n'est pas valide dans la liste de sélection » liée à GROUP BY ?

Pourquoi ma requête SQL génère-t-elle une erreur « La colonne n'est pas valide dans la liste de sélection » liée à GROUP BY ?

Barbara Streisand
Libérer: 2025-01-23 01:21:10
original
301 Les gens l'ont consulté

Why Does My SQL Query Throw a

Erreur de requête SQL : la colonne n'est pas valide dans la liste SELECT car elle n'est pas conforme à une fonction d'agrégation ou à une clause GROUP BY

Lors de l'exécution d'une requête SQL, vous pouvez rencontrer l'erreur suivante :

<code>Column 'Column_Name' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.</code>
Copier après la connexion

La raison de cette erreur est la suivante :

Regroupement de données

Dans la clause GROUP BY, les lignes avec la même valeur de colonne sont spécifiées pour être regroupées. Par exemple, dans la requête suivante :

<code>SELECT loc.LocationID, emp.EmpID
FROM Employee AS emp FULL JOIN Location AS loc ON emp.LocationID = loc.LocationID
GROUP BY loc.LocationID</code>
Copier après la connexion

Les employés sont regroupés par leur LocationID. Cependant, si vous essayez d'inclure une colonne dans la liste SELECT qui ne figure pas dans la clause GROUP BY (par exemple, emp.EmpID), vous obtiendrez cette erreur car il est impossible de déterminer quel EmpID doit être sélectionnée pour chaque valeur de groupe.

Fonction d'agrégation

Les fonctions d'agrégation telles que SUM, COUNT, MAX et MIN) peuvent être utilisées pour obtenir des informations récapitulatives sur les données groupées. . Si vous incluez une colonne non agrégée dans la liste SELECT mais qu'elle ne fait pas partie d'une clause GROUP BY, vous devez utiliser une fonction d'agrégation dessus.

Par exemple, si vous souhaitez calculer le nombre d'employés par site, vous utiliserez :

<code>SELECT loc.LocationID, COUNT(emp.EmpID)
FROM Employee AS emp FULL JOIN Location AS loc ON emp.LocationID = loc.LocationID
GROUP BY loc.LocationID</code>
Copier après la connexion

Cela garantit que pour chaque emplacement, seul un nombre d'employés est renvoyé, plutôt qu'une liste d'identifiants d'employés individuels.

Solution

Pour résoudre cette erreur vous devez :

  • Ajouter des colonnes à la clause GROUP BY : Cela regroupera également les données en fonction des colonnes supplémentaires.
  • Utilisez une fonction d'agrégation sur les colonnes de la liste SELECT : Cela calculera les informations récapitulatives pour chaque groupe en fonction de la colonne non agrégée.

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