错误:有序集聚合模式需要WITHIN GROUP

时间:2015-06-24 15:41:47

标签: postgresql aggregate-functions postgresql-9.4

我一直在使用Postgres(版本9.2和9.3)这个功能:https://wiki.postgresql.org/wiki/Aggregate_Mode一段时间。现在最近升级到版本9.4后,我在使用该函数时遇到以下错误:

PG::WrongObjectType: ERROR:  WITHIN GROUP is required for ordered-set aggregate mode
       LINE 1: SELECT  mode(logins_count) AS mode_value FROM "registrations"  WHERE "registrations"."cr...

执行以下操作时发生错误:

SELECT mode(logins_count) AS mode_value FROM registrations
WHERE registrations.created_at > '20141105';

我不明白错误信息,我不知道我必须改变什么?

1 个答案:

答案 0 :(得分:4)

Postgres 9.4引入了一个新的聚合函数子类。 Per documentation:

  

有一个名为 ordered-set的聚合函数的子类    order_by_clause 必需的汇总,通常是因为   聚合的计算只在特定方面才合理   排序其输入行。

新的内置有序集合函数之一是mode() 碰巧碰到自定义聚合函数的名称。 (您所指的Postgres Wiki page自2013年以来尚未更新。)

解决方案

为自定义聚合函数使用其他名称以避免碰撞 或者 更好 :改用新的内置函数。有关详细信息,请阅读updated Postgres Wiki