La raison pour laquelle une colonne n'est pas valide dans la liste de sélection est qu'elle n'est pas incluse dans une fonction d'agrégation ou une clause GROUP BY.
P粉517090748
2023-08-23 14:36:31
<p>J'ai reçu une erreur - </p>
<blockquote>
<p>La colonne 'Employee.EmpID' n'est pas valide dans la liste de sélection car elle est
Non inclus dans les fonctions d'agrégation ou les clauses GROUP BY. </p>
</blockquote>
<heure />
<pre class="brush:php;toolbar:false;">sélectionnez loc.LocationID, emp.EmpID
de l'employé en tant qu'em jointure complète Emplacement en tant que loc
sur emp.LocationID = loc.LocationID
regrouper par loc.LocationID</pre>
<p>Cette situation correspond à la réponse donnée par Bill Karwin. </p>
<p>Correction ci-dessus, réponse adaptée à ExactaBox - </p>
<pre class="brush:php;toolbar:false;">select loc.LocationID, count(emp.EmpID) -- pas count(*), je ne veux pas compter les valeurs nulles
de l'employé en tant qu'em jointure complète Emplacement en tant que loc
sur emp.LocationID = loc.LocationID
regrouper par loc.LocationID</pre>
<heure />
<p><strong>Question originale -</strong></p>
<p>Pour les requêtes SQL -</p>
<pre class="brush:php;toolbar:false;">sélectionner *
de l'employé en tant qu'em jointure complète Emplacement en tant que loc
sur emp.LocationID = loc.LocationID
regrouper par (loc.LocationID)</pre>
<p>Je ne comprends pas pourquoi cette erreur se produit. Tout ce que je veux faire, c'est rejoindre les tables, puis regrouper tous les employés d'un endroit spécifique. </p>
<p><strong>Je pense avoir partiellement expliqué mon problème. Dites-moi si vous pouvez -</strong>
<p>Pour regrouper tous les employés travaillant au même endroit, il faut d'abord mentionner le LocationID. </p>
<p>Ensuite, nous ne pouvons pas/ne mentionnons pas chaque identifiant d'employé à côté. Au lieu de cela, nous mentionnons le nombre total d'employés sur le site, c'est-à-dire que nous devrions SUM() les employés travaillant sur ce site. Je ne sais pas pourquoi nous opterions pour cette dernière voie.
Cela explique donc la partie "il n'est contenu dans aucune des fonctions d'agrégation" de l'erreur. </p>
<p>Quelle est l'explication de la partie incorrecte de la clause <strong><code>GROUP BY</code></strong> </p>
Si vous définissez la désactivation dans la clause
ONLY_FULL_GROUP_BY
服务器模式(默认情况下),您的查询将在MYSQL
中运行。但在本例中,您使用的是不同的 RDBMS。因此,为了使您的查询正常工作,请将所有非聚合列添加到您的GROUP BY
, par exempleUne colonne non agrégée signifie que la colonne ne sera pas transmise aux fonctions d'agrégation, telles que
SUM
、MAX
、COUNT
etc.Supposons que j'ai le tableau suivant
T
:J'exécute la requête suivante :
La sortie doit avoir deux lignes, une pour
a=1
,第二行为a=2
.Mais que doit montrer la valeur de b dans ces deux lignes ? Il existe trois possibilités pour chaque cas, et rien dans la requête n'indique clairement quelle valeur choisir pour b dans chaque groupe. Le sens est très vague.
Cela démontre la Règle de valeur unique qui interdit d'obtenir des résultats non définis lors de l'exécution d'une requête GROUP BY et d'inclure tout critère de colonne dans la liste de sélection qui ne fait pas partie du regroupement ni n'apparaît dans les fonctions d'agrégation (SUM, MIN, MAX, etc. .).
La réparation pourrait ressembler à ceci :
Maintenant, vous souhaitez évidemment le résultat suivant :