You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL percentile_rank精确计算逻辑及与Scipy结果差异问询

PostgreSQL percent_rank() 的计算逻辑解析
  • 核心计算公式:PostgreSQL的percent_rank()属于窗口函数,其精确计算逻辑为:

    (rank - 1) / (total_rows - 1)
    

    其中:

    • rank是当前行通过rank()函数得到的排名(相同数值会获得相同排名,后续排名会出现跳跃)
    • total_rows是当前窗口内的总行数
  • 代入你的示例验证:
    你的数据集总行数为554,目标数据的排名是306,代入公式计算:

    (306 - 1) / (554 - 1) = 305 / 553 ≈ 0.5515370705
    

    转换为百分比后就是你得到的55.15370705,和PostgreSQL的计算结果完全匹配。

  • 与scipy percentileofscore 的差异根源:
    scipy的percentileofscore提供四种计算类型,核心是对相同值的统计逻辑不同:

    • strict:仅统计严格小于目标值的行数占总行数的比例
    • weak:统计小于等于目标值的行数占总行数的比例
    • rank:基于排名的占比,公式为rank / total_rows
    • mean:取strict和weak结果的平均值
      而PostgreSQL的percent_rank()采用的是秩转换标准化逻辑,将排名映射到[0,1]区间,和scipy的四种计算类型均不直接对应,这就是两者结果不一致的原因。

内容的提问来源于stack exchange,提问作者Brian Postow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:24:26