sql server -如何使用T-SQL Group By

Translate

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

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

还有什么时候GROUP BY有用,对性能有什么影响?

This question and all comments follow the "Attribution Required."

所有的回答

Translate

要从具有超过5个小部件的每个小部件类别中检索小部件数量,可以执行以下操作:

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

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

来源
Translate

GROUP BY与DISTINCT相似,因为它将多个记录组合为一个。

这个例子是从http://www.devguru.com/technologies/t-sql/7080.asp,在“产品”表中列出了不同的产品。

SELECT Product FROM Products GROUP BY Product

Product
-------------
Desktop
Laptop
Mouse
Network Card
Hard Drive
Software
Book
Accessory

与BYTINCT相比,GROUP BY的优点在于,当与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
来源
Stu
Translate

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

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

来源
Translate

计算使用标签的次数可能是一个Google示例:

SELECT TagName, Count(*)
AS TimesUsed
FROM Tags
GROUP BY TagName ORDER TimesUsed

如果您只是想要一个独特的标签值,我宁愿使用DISTINCT声明。

SELECT DISTINCT TagName
FROM Tags
ORDER BY TagName ASC
来源
Translate

当您想要生成将平均或汇总一堆数据的报告时,GROUP BY也有帮助。您可以按部门ID和SUM分组所有销售收入,或按AVG计算每月的销售数量。

来源