multiple - sql group by where




列的原因在選擇列表中無效,因為它不包含在聚合函數或GROUP BY子句中 (3)

可能重複:
SQL中的GROUP BY /聚合函數混淆

我有一個錯誤 -

列'Employee.EmpID'在選擇列表中無效,因為它不包含在聚合函數或GROUP BY子句中。

select loc.LocationID, emp.EmpID
from Employee as emp full join Location as loc 
on emp.LocationID = loc.LocationID
group by loc.LocationID 

這種情況符合Bill Karwin給出的答案。

更正以上,適合由ExactaBox回答 -

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 

原文問題 -

對於SQL查詢 -

select *
from Employee as emp full join Location as loc 
on emp.LocationID = loc.LocationID
group by (loc.LocationID)

我不明白為什麼我會得到這個錯誤。 我想要做的就是加入表格,然後將所有員工聚集在一起。

我想我對自己的問題有一個部分的解釋。 告訴我,如果它確定 -

要將所有在同一地點工作的員工分組,我們必須首先提及LocationID。

然後,我們不能/不會提及它旁邊的每個員工ID。 相反,我們提到該位置的僱員總數,即我們應該SUM()在該位置工作的僱員。 為什麼我們以後一種方式來做,我不確定。 因此,這解釋了“它不包含在集合函數中”的部分錯誤。

錯誤的GROUP BY子句部分的解釋是什麼?


“我想要做的就是加入表格,然後將所有員工聚集在一起。”

這聽起來像你希望SQL語句的輸出列出公司中的每個員工,但首先是所有Anaheim辦公室的人員,然後是布法羅辦公室的人員,然後是克利夫蘭辦公室的人員(A, B,C,明白了,顯然我不知道你有什麼位置)。

在這種情況下,會丟失GROUP BY語句。 所有你需要的是ORDER BY loc.LocationID


假設我有下表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

如果您設置為禁用ONLY_FULL_GROUP_BY服務器模式( 默認情況下是 ),您的查詢將在MYSQL ONLY_FULL_GROUP_BY 。 但在這種情況下,您正在使用不同的RDBMS。 因此,為了使您的查詢工作, 請將所有非聚合列添加到您的GROUP BY子句中,例如

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

非聚集列意味著該列不會傳遞到聚合函數,如SUMMAXCOUNT等。





aggregate-functions