我在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