选择任何/第一个/最后一个/随机值的聚合函数

oᴉɹ*_*ǝɥɔ 5 postgresql aggregate

我运行一个如下所示的查询

WITH src AS (
    ...
)
SELECT MAX(field1), array_agg(field2)
FROM src
Run Code Online (Sandbox Code Playgroud)

我知道field1从 src 返回的所有行中都是相同的,所以我真的不在乎与它一起使用的聚合函数是MAX还是MIN. 在我的情况下field1是一个数组,所以我很好奇是否有更有效的方法来获取任何field1不包括将其与之前保存的 MIN/MAX 进行比较的开销的方法。如果有一个函数来获取第一个/保留最后一个值field1将是理想的。

oᴉɹ*_*ǝɥɔ 5

我相信我找到了一个更有效的 SQL 来实现我想要实现的目标

WITH src AS (
    ...
)
, identical_field1 (
    SELECT field1 FROM src LIMIT 1
)
SELECT (SELECT field1 FROM identical_field1), array_agg(field2)
FROM src
Run Code Online (Sandbox Code Playgroud)

子选择 onfield1仅评估一次,并且仅从 请求单行src

我暂时不将其标记为答案,因为有人可能仍会提出更有效的方法。


Eva*_*oll 0

我知道 field1 在从 src 返回的所有行中都是相同的,所以我真的不在乎它使用的聚合函数是 MAX 还是 MIN。

如果它们是相同的,那么除非存在性能差异,否则我不会这样写,

SELECT MAX(field1), array_agg(field2)
FROM src
Run Code Online (Sandbox Code Playgroud)

但像这样,

SELECT field1, array_agg(field2)
FROM src
GROUP BY field1;
Run Code Online (Sandbox Code Playgroud)

害羞的是,我会选择 MIN/MAX 你有什么理由相信它不够快或者你可以做得更快?