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