SQL乘以当前行和所有先前行列

时间:2017-09-07 22:20:15

标签: sql

使用Postgres,我想学习如何将当前值乘以之前的所有值。例如,第4个值的总和为4 * 3 * 2 * 1.

输入:

Value: 1
Value: 2
Value: 3
Value: 4

输出:

Total: 0
Total: 2
Total: 6
Total: 24

1 个答案:

答案 0 :(得分:0)

假设您有一个名为numbers的表,其中包含一个名为n的列。您可以执行以下操作:

CREATE AGGREGATE mul(bigint) ( SFUNC = int8mul, STYPE=bigint );

SELECT mul(n) OVER (ORDER BY m.row_num) FROM (
    SELECT n, row_number() OVER (ORDER BY n) from numbers
) m;

Postgres没有用于乘法的聚合函数,因此我们需要首先制作一个。然后我们在第二个查询中使用它。