我如何使用T-SQL Group By

时间:2008-08-05 18:55:36

标签: sql sql-server group-by

我知道我需要(虽然我不知道为什么)SQL查询结尾的GROUP BY子句,它使用countsum等任何聚合函数, avg等等:

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

什么时候GROUP BY会有用,哪些表现会有什么影响?

5 个答案:

答案 0 :(得分:34)

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

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

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

答案 1 :(得分:14)

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

答案 2 :(得分:4)

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

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

答案 3 :(得分:2)

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

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

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

SELECT DISTINCT TagName
FROM Tags
ORDER BY TagName ASC

答案 4 :(得分:0)

当您想生成一个平均或汇总一堆数据的报表时,

GROUP BY也会有所帮助。您可以按部门ID和SUM所有销售收入或AVG计算每个月的销售额。