Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用T-SQL Group By_Sql_Sql Server_Group By - Fatal编程技术网

如何使用T-SQL Group By

如何使用T-SQL Group By,sql,sql-server,group-by,Sql,Sql Server,Group By,我知道我需要(尽管我不知道为什么)在使用任何聚合函数(如count、sum、avg等)的SQL查询末尾使用GROUPBY子句: SELECT count(userID), userName FROM users GROUP BY userName 其他情况下,GROUP BY什么时候有用?性能影响是什么?计算使用标签的次数可能是谷歌的一个例子: SELECT TagName, Count(*) AS TimesUsed FROM Tags GROUP BY TagName ORDER Time

我知道我需要(尽管我不知道为什么)在使用任何聚合函数(如
count
sum
avg
等)的SQL查询末尾使用
GROUPBY
子句:

SELECT count(userID), userName
FROM users
GROUP BY userName

其他情况下,
GROUP BY
什么时候有用?性能影响是什么?

计算使用标签的次数可能是谷歌的一个例子:

SELECT TagName, Count(*)
AS TimesUsed
FROM Tags
GROUP BY TagName ORDER TimesUsed
如果您只是想要一个不同的标签值,我更愿意使用
distinct
语句

SELECT DISTINCT TagName
FROM Tags
ORDER BY TagName ASC

当您想要生成一个将对一组数据求平均值或求和的报告时,GROUP BY也会有所帮助。您可以根据部门ID和所有销售收入之和或每个月的平均销售计数进行分组。

GROUP By强制在返回记录之前填充整个集合(因为它是隐式排序)


出于这个原因(以及许多其他原因),不要在子查询中使用Group By。

要从包含5个以上小部件的每个小部件类别中检索小部件的数量,可以执行以下操作:

SELECT WidgetCategory, count(*)
FROM Widgets
GROUP BY WidgetCategory
HAVING count(*) > 5

“having”子句是人们经常忘记的东西,而是选择将所有数据检索到客户端并在那里进行迭代。

GROUP BY与DISTINCT类似,它将多个记录分组为一个记录

此示例借用自,在products表中列出了不同的产品

SELECT Product FROM Products GROUP BY Product

Product
-------------
Desktop
Laptop
Mouse
Network Card
Hard Drive
Software
Book
Accessory
GROUPBY优于DISTINCT的优点是,当与HAVING子句一起使用时,它可以为您提供粒度控制

SELECT Product, count(Product) as ProdCnt
FROM Products
GROUP BY Product
HAVING count(Product) > 2

Product      ProdCnt
--------------------
Desktop          10
Laptop            5
Mouse             3
Network Card      9
Software          6

请注意,“分组依据”不会对结果集排序。如果您需要一个特定的顺序,那么通过一种更好的方式添加顺序,即SQL标准在使用它时不保证任何顺序。。。但是如何实现分组而不进行排序呢?我见过的所有实现都使用某种排序,并且几乎总是按顺序返回结果,这是一种副作用。天哪,我想只有你回答了这个问题的“性能”方面+1.