Aggregate
GROUP BY 在依賴欄位上
假設我有一個 SELECT 語句,如下所示:
SELECT ..., field1 FROM ... GROUP BY field1
現在假設我想返回第二個欄位
field2
. 碰巧,field2 在功能上依賴於 field1(例如,field1 和 field2 可能來自同一個表,而 field1 是該表的主鍵)。我現在有兩種等效的方法可以將 field2 添加到查詢中:選項1:
SELECT ..., field1, field2 FROM ... GROUP BY field1, field2
選項 2:
SELECT ..., field1, MIN(field2) /* or some other, arbitrary aggregate function */ FROM ... GROUP BY field1
同樣,由於 field2 在功能上依賴於 field1,因此兩個查詢都應該返回相同的結果集。
是否有充分的理由偏愛一種選擇而不是另一種?
答案可以是特定於平台的。儘管結果相同,但您的表現可能會大不相同。
我會建議另一種方法,因為它似乎清楚地記錄了以下意圖:計算一些聚合,然後用另一個欄位裝飾它們。這是一個例子:
WITH CustomerTotals AS( SELECT CustomerID, SUM(Amount) AS TotalAmount FROM Orders GROUP BY CustomerID ) SELECT Customers.Name, CustomerTotals.TotalAmount FROM CustomerTotals JOIN Customers ON CustomerTotals.CustomerID = Customers.CustomerID