GROUP BY 依赖字段

Hei*_*nzi 5 aggregate group-by

假设我有一个 SELECT 语句,如下所示:

SELECT ..., field1
  FROM ...
 GROUP BY field1
Run Code Online (Sandbox Code Playgroud)

现在假设我想返回第二个字段field2. 碰巧,field2 在功能上依赖于field1(例如,field1 和field2 可能来自同一个表,而field1 是该表的主键)。我现在有两种等效的方法可以将 field2 添加到查询中:

选项1:

SELECT ..., field1, field2
  FROM ...
 GROUP BY field1, field2
Run Code Online (Sandbox Code Playgroud)

选项 2:

SELECT ..., field1, MIN(field2)  /* or some other, arbitrary aggregate function */
  FROM ...
 GROUP BY field1
Run Code Online (Sandbox Code Playgroud)

同样,由于 field2 在功能上依赖于 field1,两个查询都应该返回相同的结果集。

有什么好的理由更喜欢一种选择吗?

A-K*_*A-K 5

答案可以是特定于平台的。尽管结果相同,但您的表现可能会大不相同。

我会建议另一种方法,因为它似乎清楚地记录了以下意图:计算一些聚合,然后用另一个字段装饰它们。下面是一个例子:

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
Run Code Online (Sandbox Code Playgroud)

  • 我认为您错过了 CTE 中的 GROUP BY。 (4认同)