我如何使用T-SQL Group By

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

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

其他情况下, GROUP BY 是否有用,以及性能方面的影响是什么?

0
额外 编辑
意见: 1
请注意,“GROUP BY”不会对结果集进行排序。如果您需要特定的订单,请添加ORDER BY
额外 作者 David Gardiner,

5 答案

当您想要生成一份报告来平均或汇总一堆数据时,GROUP BY也有所帮助。您可以通过部门编号和SUM所有销售收入或AVG计算每个月的销售额。

0
额外

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

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

如果你只是想要一个独特的标签值,我宁愿使用 DISTINCT 语句。

SELECT DISTINCT TagName
FROM Tags
ORDER BY TagName ASC
0
额外

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

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

SELECT Product FROM Products GROUP BY Product

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

GROUP BY优于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
0
额外
非常简单的例子就是+1
额外 作者 user96403,

要从每个具有5个窗口小部件的窗口小部件类别中检索窗口小部件的数量,可以这样做:

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

“拥有”条款是人们经常忘记的东西,而是选择将所有数据检索到客户端并在其中迭代。

0
额外

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

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

0
额外
高利,我认为你是唯一一个回答问题“表现”问题的人。 +1
额外 作者 MickyD,