我知道我需要(尽管我不知道为什么)GROUP BY
在使用任何聚合函数(如count
, sum
,avg
等)的 SQL 查询末尾有一个子句:
SELECT count(userID), userName
FROM users
GROUP BY userName
还有GROUP BY
什么时候有用,性能影响是什么?
我知道我需要(尽管我不知道为什么)GROUP BY
在使用任何聚合函数(如count
, sum
,avg
等)的 SQL 查询末尾有一个子句:
SELECT count(userID), userName
FROM users
GROUP BY userName
还有GROUP BY
什么时候有用,性能影响是什么?
要从具有超过 5 个小部件的每个小部件类别中检索小部件的数量,您可以执行以下操作:
SELECT WidgetCategory, count(*)
FROM Widgets
GROUP BY WidgetCategory
HAVING count(*) > 5
“have”子句是人们经常忘记的东西,而是选择将所有数据检索到客户端并在那里迭代。
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
Group By 强制在返回记录之前填充整个集合(因为它是隐式排序)。
出于这个原因(以及许多其他原因),切勿在子查询中使用 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 和 SUM 对每个月的所有销售收入或 AVG 进行分组。