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

Postgres中如何为支付金额数据记录划分四分位数(Quartiles)

PostgreSQL实现支付金额四分位划分方案

你可以通过以下两种内置函数实现需求,可根据是否要求相近值同组选择方案:

方案1:NTILE窗口函数快速均分

直接将排序后的记录均分为4份,适合不需要严格保留相近值同组的场景:

SELECT 
    id,
    payment,
    -- 按支付金额升序排列后均分为4组,拼接为Q1~Q4格式
    'Q' || NTILE(4) OVER (ORDER BY payment ASC) AS "Quartile"
FROM payment_records;

方案2:WIDTH_BUCKET等宽分箱(推荐,符合相近值同组要求)

该方法会先基于现有数据的支付金额范围自动划分4个等宽区间,数值接近的记录会自动归为同一组,不会被强制拆分到不同分位:

WITH payment_stats AS (
    -- 先计算当前所有记录的支付金额上下限
    SELECT MIN(payment) AS min_pay, MAX(payment) AS max_pay
    FROM payment_records
)
SELECT 
    id,
    payment,
    'Q' || WIDTH_BUCKET(payment, min_pay, max_pay, 4) AS "Quartile"
FROM payment_records, payment_stats;

小提示:如果出现最大值被分到Q5的异常情况,可将WIDTH_BUCKET的上限参数调整为max_pay * 1.0001,即可避免边界值溢出问题。

自定义调整说明

如果需要手动指定分位分界阈值,可直接修改WIDTH_BUCKET的参数,无需通过CTE计算上下限,示例:

SELECT 
    id,
    payment,
    'Q' || WIDTH_BUCKET(payment, 0, 2500000, 4) AS "Quartile"
FROM payment_records;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:24:03