我在SQL Server中有組問題,通過如何在SQL Server查詢中使用group by?
我有這個簡單的SQL語句:
select *
from Factors
group by moshtari_ID
,我得到這個錯誤:
消息8120,級別16,狀態1,第1行
Column'Factors.ID'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。
這是我的結果,而不按:
,這是錯誤與GROUP BY命令:
哪裏是我的問題嗎?
我在SQL Server中有組問題,通過如何在SQL Server查詢中使用group by?
我有這個簡單的SQL語句:
select *
from Factors
group by moshtari_ID
,我得到這個錯誤:
消息8120,級別16,狀態1,第1行
Column'Factors.ID'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。
這是我的結果,而不按:
,這是錯誤與GROUP BY命令:
哪裏是我的問題嗎?
一般而言,一旦開始分組,SELECT中列出的每列必須是GROUP中的列或其中的某個聚合。比方說,你有這樣的表:
| ID | Name | City |
| 1 | Foo bar | San Jose |
| 2 | Bar foo | San Jose |
| 3 | Baz Foo | Santa Clara |
如果你希望得到您的數據庫中的所有城市的列表,並嘗試:
SELECT * FROM table GROUP BY City
...這將失敗,因爲你請求不在GROUP BY子句中的列(ID和名稱)。您可以改爲:
SELECT City, count(City) as Cnt FROM table GROUP BY City
...這會讓你:
| City | Cnt |
| San Jose | 2 |
| Santa Clara | 1 |
...但不會讓你的ID或名稱。你可以用例如子選擇或自我連接,但基本上你想要做的事情是不可能的。進一步分解你的問題(你希望數據看起來像什麼?),然後從那裏開始。
祝你好運!
當你分組時,你只能選擇你分組的列。其他列需要進行彙總。這可以用min()
,avg()
,count()
,...
這樣的功能來完成。因爲使用group by
可以使多個記錄具有唯一性。但是,列不是唯一的呢?數據庫需要有關如何顯示然後聚合的規則。
您需要在group by中應用聚合函數,如max(),avg(),count()。
例如這個查詢將總結總金額爲所有moshtari_ID
select moshtari_ID,sum (totalAmount) from Factors group by moshtari_ID;
輸出將是
moshtari_ID SUM
2 120000
1 200000
試試吧,
select *
from Factorys
Group by ID, date, time, factorNo, trackingNo, totalAmount, createAt, updateAt, bark_ID, moshtari_ID
如果應用組條款,那麼你只能在選擇中使用組列和聚合函數
語法: SELECT表達式,表達式2,... expression_n, 的aggregate_function(aggregate_expression) FROM表 [WHERE條件] GROUP BY表達式,表達式2,... expression_n [ORDER BY表達式[ASC | DESC]];
這不提供任何額外的元素。 – PJProudhon
你需要了解分組。請先參加教程 –
你想達到什麼目的?你想得到什麼輸出? – Mureinik