Aggregate

GROUP BY 在依賴欄位上

  • October 17, 2012

假設我有一個 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

引用自:https://dba.stackexchange.com/questions/27087