Postgres 9.6.6,最新的Ubuntu LTS。
我有一列每日增长(+-)的百分比,例如:
Trader_Id Date 8_AM 8_PM Growth%
1 1/1 290 248 -14,48
1 2/1 225 880 291,11
1 3/1 732 512 -30,05
1 4/1 621 602 -3,06
1 5/1 314 314 0,0
1 6/1 0 0 0,0
1 7/1 294 95 -67,69
对总和减去一系列百分比以获得所选交易者的总增长百分比(+-)的正确查询是什么?
在这种情况下,请选择一个Trader_Id,按日期ASC排序,然后从可用的第一天起计算总增长百分比。
这是手动计算的顺序:
Growth% Calculation Result
-14,48 1+(-14,48/100) 0,8552
291,11 0,8552+(291,11/100*0,8552) 3,34477272
-30,05 3,34477272+(-30,05/100*3,34477272) 2,339668518
-3,06 2,33966851764+(-3,06/100*2,33966851764) 2,268074661
0 2,26807466100022+(0/100*2,26807466100022) 2,268074661
0 2,26807466100022+(0/100*2,26807466100022) 2,268074661
-67,69 2,26807466100022+(-67,69/100*2,26807466100022) 0,732814923
(0,73281492296917-1)*100 -26,7185077
SELECT SOMETHING(Growth% ORDER BY Date)
的最终预期结果是 -26,72%
找出正确的公式可以做到这一点:
现在剩下的问题是如何使用正确的SQL ...
答案 0 :(得分:0)
我相信您有一列涉及日期的信息,并且您想知道当前一周的百分比总和。
你可以做
SELECT SUM(day_percent)
FROM t
WHERE calendar_day BETWEEN
date_trunc('week',calendar_day) AND
date_trunc('week',calendar_day) + INTERVAL '7 DAYS';
答案 1 :(得分:0)
由于缺乏信息,假设您的列growth
的类型为numeric
,并且您也希望numeric
的计算精度。
(使用double precision
进行计算比较便宜,但可能会增加舍入误差。)
创建一个汇总函数以一次生成一个序列产品 :
CREATE AGGREGATE numeric_mul(numeric) (
sfunc = numeric_mul,
stype = numeric
);
然后查询很简单:
SELECT 100 * numeric_mul(growth *.01 + 1) - 100
FROM tbl;
db<>fiddle在这里
输入行的顺序与结果无关。
相关: