簡體   English   中英

Postgres前幾個月的累計金額

[英]Postgres cumulative sum over earlier months

我有一個表,其中包含該月的用戶百分比。 我想將這些百分比相加得出該月的累計金額。 我認為累積功能不正確。

因此,第5行應顯示cum_amt 0.1381 ...
第4行,0.1381 + 0.010169 = 0.148,
等等...

但是第1行應該是0.164 BC,不是Bayside

在此處輸入圖片說明

select 
    created, name, new_users, possible, 
    (new_users::FLOAT / possible) as penetration,
    sum((new_users::FLOAT / possible)) OVER (ORDER BY created) AS cum_amt

from 
    mom_users

where 
    new_users > 10

order by
    name, created
    desc

我認為您希望在解析函數之后partition by划分:

select created, name, new_users, possible, 
       (new_users::FLOAT / possible) as penetration,
       (sum(new_users::FLOAT) over (partition by name order by created) /
        sum(possible::FLOAT) over (partition by name order by created)
       ) as cum_amt

from mom_users
where new_users > 10
order byname, created desc;

我認為這段代碼適合您。

CREATE TABLE mom_users (
created timestamp,
name text,
new_users int,
possible int
);

insert into mom_users values('2016-11-01 00:00:00', 'banning', 11, 67);
insert into mom_users values('2016-10-01 00:00:00', 'bayside', 253, 1180);
insert into mom_users values('2016-09-01 00:00:00', 'bayside', 92, 1180);
insert into mom_users values('2016-06-01 00:00:00', 'bayside', 12, 1180);
insert into mom_users values('2016-05-01 00:00:00', 'bayside', 163, 1180);

SELECT *, new_users/possible::real penetration, sum(new_users/possible::real) OVER (PARTITION BY name ORDER BY CREATED) cum_amt 
FROM mom_users 
WHERE new_users > 10
ORDER BY created DESC;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM