如何使用T-SQL分组依据
时间:2020-03-05 18:37:49 来源:igfitidea点击:
我知道我需要(尽管不知道为什么)在SQL查询末尾有一个" GROUP BY"子句,该子句使用任何聚合函数,例如" count"," sum"," avg"等:
SELECT count(userID), userName FROM users GROUP BY userName
还有什么时候" GROUP BY"会有用,对性能的影响是什么?
解决方案
回答
计算使用标签的次数可能是一个Google示例:
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每月计算销售数量。
回答
Group By强制在返回记录之前填充整个集合(因为它是隐式排序)。
由于这个原因(以及许多其他原因),切勿在子查询中使用Group By。
回答
要从具有超过5个小部件的每个小部件类别中检索小部件数量,可以执行以下操作:
SELECT WidgetCategory, count(*) FROM Widgets GROUP BY WidgetCategory HAVING count(*) > 5
人们经常会忘记"拥有"子句,而选择将所有数据检索到客户端并在那里进行迭代。
回答
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