如何在SQL Server查询中使用group by?

时间:2016-08-01 20:34:47

标签: sql-server

我在SQL Server中有分组问题

我有这个简单的SQL语句:

select * 
from Factors 
group by moshtari_ID

我收到此错误:

  

Msg 8120,Level 16,State 1,Line 1
  专栏'因素.ID'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

这是我的结果,没有分组:

enter image description here

这是逐个命令的错误:

enter image description here

我的问题在哪里?

5 个答案:

答案 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

的totalAmount
select 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 ]];