我知道我需要(儘管我不知道爲什麼)GROUP BY
子句末尾的SQL查詢使用任何聚合函數,如count
,等:我如何使用T-SQL組通過
SELECT count(userID), userName
FROM users
GROUP BY userName
當別人將GROUP BY
是有用的,什麼是性能後果?
我知道我需要(儘管我不知道爲什麼)GROUP BY
子句末尾的SQL查詢使用任何聚合函數,如count
,等:我如何使用T-SQL組通過
SELECT count(userID), userName
FROM users
GROUP BY userName
當別人將GROUP BY
是有用的,什麼是性能後果?
爲了取回有超過5個部件每個插件類件的數量,你可以這樣做:
SELECT WidgetCategory, count(*)
FROM Widgets
GROUP BY WidgetCategory
HAVING count(*) > 5
「具有」條款是人們常常忘了,而是選擇檢索所有他們的數據給客戶並在那裏迭代。
計數使用可能是一個谷歌的例子時代標籤的數量:
SELECT TagName, Count(*)
AS TimesUsed
FROM Tags
GROUP BY TagName ORDER TimesUsed
如果你只是想標籤一個獨特的價值,我寧願使用DISTINCT
聲明。
SELECT DISTINCT TagName
FROM Tags
ORDER BY TagName ASC
當你想要生成一個報表來平均或總結一堆數據時,GROUP BY也有幫助。您可以通過部門編號和SUM所有銷售收入或AVG計算每個月的銷售額。
Group By強制在返回記錄之前填充整個集合(因爲它是隱式排序)。
由於這個原因(和許多其他),從來沒有在子查詢中使用Group By。
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
非常奇妙簡單的例子它是一個+1 – user96403 2011-10-07 10:30:46
請注意'GROUP BY'不會對結果集進行排序。如果你需要一個特定的訂單,然後添加ORDER BY太 – 2011-09-27 05:21:18