【问题标题】:Postgresql Percentile_Cont not working: function percentile_cont(numeric, character varying, numeric) does not existPostgresql Percentile_Cont 不起作用:函数 percentile_cont(numeric, character varying, numeric) 不存在
【发布时间】:2021-12-26 03:18:07
【问题描述】:

我有一个表格 TableX 看起来像:

Name Value
Bob 100
Cathy 500
Cathy 200
Cathy 100

我想处理列 Value 上的 median 以获得:

Name Value
Bob 100
Cathy 200

我正在尝试使用 percentile_cont:

select name, percentile_cont(0.5) within group (order by name, value) from TableX

但得到错误:

ERROR:  function percentile_cont(numeric, character varying, numeric) does not exist

我的 postgresql 版本是 13+,并且以下行确实有效。

SELECT percentile_cont(array(SELECT j/10.0 FROM generate_series(1,10) j)) WITHIN GROUP(ORDER BY i) AS median FROM generate_series(1,11) AS s(i);

很确定我的脚本是错误的......不胜感激。谢谢!

【问题讨论】:

    标签: postgresql median


    【解决方案1】:
    create table percent_test (name varchar, value float);
    
    insert into percent_test values ('Bob', 100), ('Cathy', 500), ('Cathy', 200), ('Cathy', 100);
    
    select name, percentile_cont(0.5) within group (order by value) from  percent_test group  by name;
     name  | percentile_cont 
    -------+-----------------
     Bob   |             100
     Cathy |             200
    
    

    Aggregate Functions:

    percentile_cont (分数双精度) WITHIN GROUP (ORDER BY 双精度) → 双精度

    percentile_cont(分数双精度)组内(ORDER BY区间)→区间

    计算连续百分位数,该值对应于有序聚合参数值集中的指定分数。如果需要,这将在相邻输入项之间进行插值。

    所以within group中的order by只能是数值,不能是字符值。将name 分组推送到查询的from 部分。

    【讨论】:

    • 非常感谢您的回答和详尽的解释!它就像一个魅力:D
    猜你喜欢
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    • 2014-06-28
    相关资源
    最近更新 更多