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

PostgreSQL转DuckDB:生成quantile_cont所需浮点数列的方法

DuckDB中生成quantile_cont所需浮点数列的解决方案

核心前提说明

DuckDB的quantile_cont函数支持两种参数形式:

  • 单个浮点数值(如0.5),返回对应分位数
  • 浮点数值数组(如[0.1, 0.2]),返回对应分位数结果数组

由于DuckDB原生generate_series仅支持整数序列,可通过以下两种方式生成0.1~1.0、步长0.1的浮点数列:


方案1:手动构造固定数组(最简单)

如果分位数范围和步长固定,直接手写数组参数即可,无需动态生成:

-- 直接传入0.1到1.0的浮点数组
SELECT quantile_cont(your_column, [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0])
FROM your_table;

方案2:通过整数序列转换生成(动态场景适用)

先利用generate_series生成整数序列,再通过除法转换为目标浮点数,最后组装成数组:

-- 动态生成0.1~1.0步长0.1的浮点数数组,传入quantile_cont
SELECT quantile_cont(your_column, ARRAY(SELECT i / 10.0 FROM generate_series(1, 10) AS t(i)))
FROM your_table;

如果需要将每个分位数的结果单独成行展示,可结合UNNEST拆分数组:

-- 拆分每个分位数,单独计算并返回结果行
SELECT
  q AS percentile,
  quantile_cont(your_column, q) AS quantile_value
FROM your_table,
     UNNEST(ARRAY(SELECT i / 10.0 FROM generate_series(1, 10) AS t(i))) AS q;

示例验证

用测试数据验证效果:

-- 创建测试表
CREATE TABLE test_data(val INT);
INSERT INTO test_data VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);

-- 测试方案1
SELECT quantile_cont(val, [0.1, 0.5, 1.0]) FROM test_data;
-- 返回结果:[1.9, 5.5, 10.0]

-- 测试方案2
SELECT quantile_cont(val, ARRAY(SELECT i/10.0 FROM generate_series(1,10))) FROM test_data;
-- 返回结果:[1.9,2.8,3.7,4.6,5.5,6.4,7.3,8.2,9.1,10.0]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:04:54