2008-08-05 79 views
26

我知道我需要(儘管我不知道爲什麼)GROUP BY子句末尾的SQL查詢使用任何聚合函數,如count,等:我如何使用T-SQL組通過

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

當別人將GROUP BY是有用的,什麼是性能後果?

+0

請注意'GROUP BY'不會對結果集進行排序。如果你需要一個特定的訂單,然後添加ORDER BY太 – 2011-09-27 05:21:18

回答

28

爲了取回有超過5個部件每個插件類件的數量,你可以這樣做:

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

「具有」條款是人們常常忘了,而是選擇檢索所有他們的數據給客戶並在那裏迭代。

1

計數使用可能是一個谷歌的例子時代標籤的數量:

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

如果你只是想標籤一個獨特的價值,我寧願使用DISTINCT聲明。

SELECT DISTINCT TagName 
FROM Tags 
ORDER BY TagName ASC 
0

當你想要生成一個報表來平均或總結一堆數據時,GROUP BY也有幫助。您可以通過部門編號和SUM所有銷售收入或AVG計算每個月的銷售額。

1

Group By強制在返回記錄之前填充整個集合(因爲它是隱式排序)。

由於這個原因(和許多其他),從來沒有在子查詢中使用Group By。

12

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

非常奇妙簡單的例子它是一個+1 – user96403 2011-10-07 10:30:46