Clickhouse实现累计求和cumulative sum

源表数据如下:

timeprovinceorder_cnt
20200601shandong100
20200601jiangsu200
20200601zhejiang300
20200602shandong200
20200602jiangsu300
20200602zhejiang400
20200603shandong400
20200603jiangsu500
20200603zhejiang600

需求是按照省份和时间分类,每天累计求和,需求的结果如下:
(每天的数据都要按照省份将之前的订单数目进行累加)

timeprovinceorder_cnt_sum
20200601shandong100
20200601jiangsu200
20200601zhejiang300
20200602shandong300
20200602jiangsu500
20200602zhejiang700
20200603shandong700
20200603jiangsu1000
20200603zhejiang1300

需要借助clickhouse的array系列函数实现: ArrayFunction

SELECT
    time,
    province,
    arraySum(arraySlice(order_cnts, 1, i)) AS order_cnt_sum  
FROM
(
    SELECT groupArray(order_cnt) AS order_cnts,
           groupArray(time) AS times,
           groupArray(province) AS provinces
    FROM
    (
        SELECT *
        FROM test_table order by time
    ) group by province
)
ARRAY JOIN
    times as time,
    provinces AS province,
    arrayEnumerate(order_cnts) AS i;
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值