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,两个查询都应该返回相同的结果集。
有什么好的理由更喜欢一种选择吗?
答案可以是特定于平台的。尽管结果相同,但您的表现可能会大不相同。
我会建议另一种方法,因为它似乎清楚地记录了以下意图:计算一些聚合,然后用另一个字段装饰它们。下面是一个例子:
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)
归档时间: |
|
查看次数: |
432 次 |
最近记录: |