【问题标题】:Is there a way to pre-sort the rows in a postgresql custom aggregate without using ORDER BY in the aggregate call?有没有办法在聚合调用中不使用 ORDER BY 对 postgresql 自定义聚合中的行进行预排序?
【发布时间】: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您希望确保订单得到遵守。

标签: postgresql aggregate-functions


【解决方案1】:

如果您希望聚合对输入值进行排序,您可能必须编写状态更改函数,以便它只收集输入并在最终函数中执行排序。如果您为大型表缓存数据,这可能需要大量内存。

根据聚合的作用,您可能会提出更好的解决方案,但不能依赖于值的特定顺序。

【讨论】:

    猜你喜欢
    • 2021-04-11
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多