列在選擇清單中無效的原因是它未包含在聚合函數或 GROUP BY 子句中
P粉517090748
2023-08-23 14:36:31
<p>我收到一個錯誤 - </p>
<blockquote>
<p>列「Employee.EmpID」在選擇清單中無效,因為它是
不包含在聚合函數或 GROUP BY 子句中。 </p>
</blockquote>
<hr />
<pre class="brush:php;toolbar:false;">select loc.LocationID, emp.EmpID
from Employee as emp full join Location as loc
on emp.LocationID = loc.LocationID
group by loc.LocationID</pre>
<p>這種情況符合 Bill Karwin 給出的答案。 </p>
<p>對上述內容的更正,適合 ExactaBox 的答案 - </p>
<pre class="brush:php;toolbar:false;">select loc.LocationID, count(emp.EmpID) -- not count(*), don't want to count nulls
from Employee as emp full join Location as loc
on emp.LocationID = loc.LocationID
group by loc.LocationID</pre>
<hr />
<p><strong>原始問題 -</strong></p>
<p>對於 SQL 查詢 -</p>
<pre class="brush:php;toolbar:false;">select *
from Employee as emp full join Location as loc
on emp.LocationID = loc.LocationID
group by (loc.LocationID)</pre>
<p>我不明白為什麼會出現此錯誤。我想要做的就是連接表,然後將特定位置的所有員工分組在一起。 </p>
<p><strong>我想我對自己的問題有了部分解釋。告訴我是否可以 -</strong> </p>
<p>要將在同一地點工作的所有員工分組,我們必須先提及 LocationID。 </p>
<p>然後,我們不能/不提及旁邊的每個員工 ID。相反,我們提到該地點的員工總數,即我們應該對在該地點工作的員工進行 SUM()。我不確定為什麼我們要採取後一種方式。
因此,這解釋了錯誤的“它不包含在任一聚合函數中”部分。 </p>
<p>錯誤的 <strong><code>GROUP BY</code></strong> 子句部分的解釋是什麼? </p>
如果您設定停用
ONLY_FULL_GROUP_BY
伺服器模式(預設情況下),您的查詢將在MYSQL
中執行。但在本例中,您使用的是不同的 RDBMS。因此,為了使您的查詢正常運作,請將所有非聚合列新增至您的GROUP BY
子句中,例如非聚合列意味著該列不會傳遞到聚合函數,例如
SUM
、MAX
#、COUNT
等。假設我有下表
T
:我執行以下查詢:
輸出應有兩行,一行為
a=1
,第二行為a=2
。但是 b 的值應該在這兩行中顯示什麼呢?每種情況都有三種可能性,查詢中沒有任何內容明確說明為每組中的 b 選擇哪個值。意思很模糊。
這示範了單值規則,該規則禁止在執行GROUP BY 查詢時獲得未定義的結果,並且在選擇清單中包含不屬於分組的任何列標準,也不會出現在聚合函數(SUM、MIN、MAX 等)中。
修復它可能如下所示:
現在很明顯您想要以下結果: