2012-07-10 135 views
2

是否需要在您的選擇中進行分組(如果使用SUM進行聚合)?你必須有一個group by子句?必須組合才能聚合?

+0

http://msdn.microsoft.com/en-us/library/ms173454.aspx – 2012-07-10 16:15:02

+0

我想你可以得到奇怪的與子查詢或東西來證明這一點 - 但通常是。 (除非你想要查詢返回的每條記錄的總和) – RThomas 2012-07-10 16:16:20

回答

6

不,這不是要求。

沒有GROUP BY的聚合是標量聚合,並且總是返回一行。

SELECT SUM(high) 
FROM master..spt_values 
WHERE 1 = 0 

骨料與GROUP BY是矢量集合和每個組返回零或一列。

SELECT [type], SUM(high) 
FROM master..spt_values 
WHERE 1 = 0 
GROUP BY [type] 
+0

+1實際上,聚合總是意味着分組。只是如果省略了「GROUP BY」(實際上它可能),那麼隱含「GROUP BY()」。 – 2012-07-11 08:46:34

+1

@AndriyM - 有趣的一點。 'SELECT SUM(high)FROM master..spt_values WHERE 1 = 0 GROUP BY()'不返回任何行。沒有'GROUP BY()'返回一行,所以它們不是等價的。 – 2012-07-11 08:49:38

+0

需要思考的東西。不過,它沒有'WHERE 1 = 0'。我想知道這是否有人問過...... – 2012-07-11 08:56:09