SQL 分区中的累计总和
SQL Cumulative sum in a partition by
考虑与客户进行 table 排序,日期和金额如下
User Date Purchase
Joe '2020-01-01' 10
Joe '2020-02-01' 20
Joe '2020-02-20' 20
Joe '2020-03-15' 15
Lucy '2020-01-12' 5
Lucy '2020-02-15' 30
Lucy '2020-02-21' 20
Lucy '2020-03-05' 30
我想获得一个新列,其中包含之前购买的累计花费,即
User Date Purchase Cum
Joe '2020-01-01' 10 10
Joe '2020-02-01' 20 30
Joe '2020-02-20' 20 50
Joe '2020-03-15' 15 65
Lucy '2020-01-12' 5 5
Lucy '2020-02-15' 30 35
Lucy '2020-02-21' 20 55
Lucy '2020-03-05' 30 85
这将是:
select t.*,
sum(purchase) over (partition by user order by date) as running_sum
from t;
您可以使用window函数:
sum(purchase) over (partition by user order by date) as purchase_sum
如果window函数不支持那么你可以使用关联子查询:
select t.*,
(select sum(t1.purchase)
from table t1
where t1.user = t.user and t1.date <= t.date
) as purchase_sum
from table t;
尝试partition by
Select User, Date, Purchase,
sum(purchase )
over (partition by User order by user )
From table
考虑与客户进行 table 排序,日期和金额如下
User Date Purchase
Joe '2020-01-01' 10
Joe '2020-02-01' 20
Joe '2020-02-20' 20
Joe '2020-03-15' 15
Lucy '2020-01-12' 5
Lucy '2020-02-15' 30
Lucy '2020-02-21' 20
Lucy '2020-03-05' 30
我想获得一个新列,其中包含之前购买的累计花费,即
User Date Purchase Cum
Joe '2020-01-01' 10 10
Joe '2020-02-01' 20 30
Joe '2020-02-20' 20 50
Joe '2020-03-15' 15 65
Lucy '2020-01-12' 5 5
Lucy '2020-02-15' 30 35
Lucy '2020-02-21' 20 55
Lucy '2020-03-05' 30 85
这将是:
select t.*,
sum(purchase) over (partition by user order by date) as running_sum
from t;
您可以使用window函数:
sum(purchase) over (partition by user order by date) as purchase_sum
如果window函数不支持那么你可以使用关联子查询:
select t.*,
(select sum(t1.purchase)
from table t1
where t1.user = t.user and t1.date <= t.date
) as purchase_sum
from table t;
尝试partition by
Select User, Date, Purchase,
sum(purchase )
over (partition by User order by user )
From table