Clickhouse实现累计求和cumulative sum

源表数据如下:

time province order_cnt
20200601 shandong 100
20200601 jiangsu 200
20200601 zhejiang 300
20200602 shandong 200
20200602 jiangsu 300
20200602 zhejiang 400
20200603 shandong 400
20200603 jiangsu 500
20200603 zhejiang 600

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

time province order_cnt_sum
20200601 shandong 100
20200601 jiangsu 200
20200601 zhejiang 300
20200602 shandong 300
20200602 jiangsu 500
20200602 zhejiang 700
20200603 shandong 700
20200603 jiangsu 1000
20200603 zhejiang 1300

需要借助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;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容