列在選擇清單中無效的原因是它未包含在聚合函數或 GROUP BY 子句中
P粉517090748
P粉517090748 2023-08-23 14:36:31
0
2
676
<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>
P粉517090748
P粉517090748

全部回覆(2)
P粉155832941

如果您設定停用 ONLY_FULL_GROUP_BY 伺服器模式(預設情況下),您的查詢將在 MYSQL 中執行。但在本例中,您使用的是不同的 RDBMS。因此,為了使您的查詢正常運作,請將所有非聚合列新增至您的GROUP BY子句中,例如

SELECT col1, col2, SUM(col3) totalSUM
FROM tableName
GROUP BY col1, col2

非聚合列意味著該列不會傳遞到聚合函數,例如 SUMMAX#、COUNT 等。

P粉090087228

假設我有下表T

a   b
--------
1   abc
1   def
1   ghi
2   jkl
2   mno
2   pqr

我執行以下查詢:

SELECT a, b
FROM T
GROUP BY a

輸出應有兩行,一行為 a=1,第二行為 a=2

但是 b 的值應該在這兩行中顯示什麼呢?每種情況都有三種可能性,查詢中沒有任何內容明確說明為每組中的 b 選擇哪個值。意思很模糊。

這示範了單值規則,該規則禁止在執行GROUP BY 查詢時獲得未定義的結果,並且在選擇清單中包含不屬於分組的任何列標準,也不會出現在聚合函數(SUM、MIN、MAX 等)中。

修復它可能如下所示:

SELECT a, MAX(b) AS x
FROM T
GROUP BY a

現在很明顯您想要以下結果:

a   x
--------
1   ghi
2   pqr
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板