Der Grund dafür, dass eine Spalte in der Auswahlliste nicht gültig ist, liegt darin, dass sie nicht in einer Aggregatfunktion oder GROUP BY-Klausel enthalten ist
P粉517090748
2023-08-23 14:36:31
<p>Ich habe eine Fehlermeldung erhalten - </p>
<blockquote>
<p>Spalte „Employee.EmpID“ ist in der Auswahlliste nicht gültig, weil sie es ist
Nicht in Aggregatfunktionen oder GROUP BY-Klauseln enthalten. </p>
</blockquote>
<hr />
<pre class="brush:php;toolbar:false;">select loc.LocationID, emp.EmpID
von Mitarbeiter als emp vollständiger Beitritt Standort als loc
auf emp.LocationID = loc.LocationID
Gruppieren nach loc.LocationID</pre>
<p>Diese Situation entspricht der Antwort von Bill Karwin. </p>
<p>Korrektur zu oben, Antwort passend für ExactaBox - </p>
<pre class="brush:php;toolbar:false;">select loc.LocationID, count(emp.EmpID) – nicht count(*), möchte keine Nullen zählen
von Mitarbeiter als emp vollständiger Beitritt Standort als loc
auf emp.LocationID = loc.LocationID
Gruppieren nach loc.LocationID</pre>
<hr />
<p><strong>Ursprüngliche Frage -</strong></p>
<p>Für SQL-Abfragen -</p>
<pre class="brush:php;toolbar:false;">select *
von Mitarbeiter als emp vollständiger Beitritt Standort als loc
auf emp.LocationID = loc.LocationID
gruppieren nach (loc.LocationID)</pre>
<p>Ich verstehe nicht, warum dieser Fehler auftritt. Ich möchte mich nur an die Tische setzen und dann alle Mitarbeiter an einem bestimmten Standort zusammenfassen. </p>
<p><strong>Ich glaube, ich habe mein Problem teilweise erklärt. Sagen Sie mir, ob Sie können -</strong>
<p>Um alle am selben Standort arbeitenden Mitarbeiter zu gruppieren, müssen wir zunächst die LocationID angeben. </p>
<p>Dann können/dürfen wir nicht jede Mitarbeiter-ID daneben erwähnen. Stattdessen geben wir die Gesamtzahl der Mitarbeiter am Standort an, d. h. wir sollten die an diesem Standort arbeitenden Mitarbeiter summieren(). Ich bin mir nicht sicher, warum wir den letzteren Weg gehen würden.
Dies erklärt also den Teil des Fehlers „Es ist in keiner der Aggregatfunktionen enthalten“. </p>
<p>Was ist die Erklärung für den falschen <strong><code>GROUP BY</code></strong>-Klauselteil? </p>
如果您设置禁用
ONLY_FULL_GROUP_BY
服务器模式(默认情况下),您的查询将在MYSQL
中运行。但在本例中,您使用的是不同的 RDBMS。因此,为了使您的查询正常工作,请将所有非聚合列添加到您的GROUP BY
子句中,例如非聚合列意味着该列不会传递到聚合函数,例如
SUM
、MAX
、COUNT
等。假设我有下表
T
:我执行以下查询:
输出应有两行,一行为
a=1
,第二行为a=2
。但是 b 的值应该在这两行中显示什么呢?每种情况都有三种可能性,查询中没有任何内容明确说明为每组中的 b 选择哪个值。意思很模糊。
这演示了单值规则,该规则禁止在运行 GROUP BY 查询时获得未定义的结果,并且在选择列表中包含不属于分组的任何列标准,也不会出现在聚合函数(SUM、MIN、MAX 等)中。
修复它可能如下所示:
现在很明显您想要以下结果: