如何在PostgreSQL SELECT查询中实现按column_b值重复累加计算
PostgreSQL 实现需求的两种方案
方案1:使用 GENERATE_SERIES 横向生成序列求和
该写法直观易读,适合逻辑需要频繁调整的场景:
SELECT t.column_a, SUM(0.75 * POWER(0.93, 0.1428 * i)) AS calculated_result FROM 你的业务表名 t, GENERATE_SERIES(1, t.column_b::INTEGER) AS series(i) GROUP BY t.column_a, t.column_b;
说明:如果column_b存在小于1或者为NULL的情况,可添加WHERE t.column_b >= 1过滤异常值避免报错。
方案2:等比数列公式直接计算(高性能首选)
你的累加逻辑本质是首项为0.75 * POWER(0.93, 0.1428)、公比为POWER(0.93, 0.1428)的等比数列前N项和,可直接用数学公式计算,完全省去序列生成、分组聚合的开销,大数据量下性能优势显著:
SELECT column_a, 0.75 * POWER(0.93, 0.1428) * (1 - POWER(POWER(0.93, 0.1428), column_b)) / (1 - POWER(0.93, 0.1428)) AS calculated_result FROM 你的业务表名;
说明:公比POWER(0.93, 0.1428)恒不等于1,无需处理分母为0的异常。
内容的提问来源于stack exchange,提问作者qubicswap.com
相关产品推荐
相关产品推荐

