我在SQL Server中有分组问题
我有这个简单的SQL语句:
select *
from Factors
group by moshtari_ID
我收到此错误:
Msg 8120,Level 16,State 1,Line 1
专栏'因素.ID'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。
这是我的结果,没有分组:
这是逐个命令的错误:
我的问题在哪里?
答案 0 :(得分:13)
通常,一旦开始GROUPing,SELECT中列出的每个列都必须是GROUP中的列或其某些聚合。我们假设您有一张这样的表:
DateTime
如果您想获得数据库中所有城市的列表,请尝试:
DateTime
...那会失败,因为你要求GROUP BY子句中没有列(ID和Name)。你可以改为:
| ID | Name | City |
| 1 | Foo bar | San Jose |
| 2 | Bar foo | San Jose |
| 3 | Baz Foo | Santa Clara |
......那会让你:
SELECT * FROM table GROUP BY City
...但不会得到你的身份证或姓名。你可以做更复杂的事情,例如subselects或self-joins,但基本上你正在尝试做的事情是不可能的。进一步细分你的问题(你希望数据看起来像什么?),然后从那里开始。
祝你好运!答案 1 :(得分:2)
分组后,您只能选择分组的列。其他列需要进行聚合。这可以通过min()
,avg()
,count()
,...等功能来完成。
这是为什么?因为使用group by
,您可以使多个记录唯一。但是这个专栏不是唯一的呢?数据库需要有关如何显示然后聚合的规则。
答案 2 :(得分:0)
你需要在group by中应用聚合函数,例如max(),avg(),count()。
例如,此查询将汇总所有moshtari_ID
的totalAmountselect moshtari_ID,sum (totalAmount) from Factors group by moshtari_ID;
输出
moshtari_ID SUM
2 120000
1 200000
答案 3 :(得分:-1)
试试吧,
select *
from Factorys
Group by ID, date, time, factorNo, trackingNo, totalAmount, createAt, updateAt, bark_ID, moshtari_ID
答案 4 :(得分:-1)
如果您正在应用group子句,那么您只能在select
中使用组列和聚合函数语法:
SELECT expression1, expression2, ... expression_n,
aggregate_function (aggregate_expression)
FROM tables
[WHERE conditions]
GROUP BY expression1, expression2, ... expression_n
[ORDER BY expression [ ASC | DESC ]];