有没有办法在聚合调用中不使用 ORDER BY 对 postgresql 自定义聚合中的行进行预排序?
Posted
技术标签:
【中文标题】有没有办法在聚合调用中不使用 ORDER BY 对 postgresql 自定义聚合中的行进行预排序?【英文标题】:Is there a way to pre-sort the rows in a postgresql custom aggregate without using ORDER BY in the aggregate call? 【发布时间】:2021-11-03 17:11:09 【问题描述】:我在 pl/pgsql 中创建了一个自定义聚合,它要求行以某种方式相对于输入列进行排序。我可以通过在聚合调用中使用ORDER BY
来完成此操作。我希望在聚合调用中不明确声明ORDER BY
的情况下进行这种排序。
例如我有聚合函数 f(A 文本,B 文本)。我可以通过这样调用它来得到正确的计算:
select
X,
Y,
f(A, B order by A, B)
from
table
group by
X,
Y
我希望能够像这样调用它并在自定义聚合的定义中指定排序。
select
X,
Y,
f(A, B)
from
table
group by
X,
Y
这可能吗?
【问题讨论】:
我知道在某些情况下,如果您的数据以正确的顺序插入(并且 rownum 会帮助您),您将实现这一点,但据我所知,您必须使用ORDER BY
if您希望确保订单得到遵守。
【参考方案1】:
如果您希望聚合对输入值进行排序,您可能必须编写状态更改函数,以便它只收集输入并在最终函数中执行排序。如果您为大型表缓存数据,这可能需要大量内存。
根据聚合的作用,您可能会提出更好的解决方案,但不能依赖于值的特定顺序。
【讨论】:
以上是关于有没有办法在聚合调用中不使用 ORDER BY 对 postgresql 自定义聚合中的行进行预排序?的主要内容,如果未能解决你的问题,请参考以下文章
mysql_group by与聚合函数order by联合使用