我知道我需要(虽然我不知道为什么)SQL查询结尾的GROUP BY
子句,它使用count
,sum
等任何聚合函数, avg
等等:
SELECT count(userID), userName
FROM users
GROUP BY userName
什么时候GROUP BY
会有用,哪些表现会有什么影响?
答案 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计算每个月的销售额。