一、sum()over()函数
sum():对某个字段求和。
over():开窗,按照某种规则,将数据分组、分窗口计算。
sum()over():对某个字段有规则的求和。规则即over()中的分组、排序字段,先按照分组字段将数据分为不同的组,再按照排序字段对求和字段组内逐级累计计算
用法:sum(求和字段)over(PARTITION by 分组字段1,分组字段2。。。 order by 排序字段1。。。)
示例:sum(交易额)over(PARTITION by 城市,年份order by 月份)
示例说明:对交易额求和,此时求和非全表求和,而是将数据按照城市和年份分到不同组,且按照月份正序累计交易额。
如凉州2023年1、2、3月交易额都为100,那么2月累计为1月+2月是200,3月累计为1月+2月+3月是300.
city yearid monthid money_num sum_over
凉州 2023 01 100 100
凉州 2023 02 100 200
凉州 2023 03 100 300
二、示例
2.1准备工作
--创建测试表create table test_sumover(city string COMMENT '城市',yearid string COMMENT'年',MONTHid string COMMENT '月',money_num DECIMAL (18,2) COMMENT '交易额');--写入测试数据INSERT into test_sumoverVALUES('凉州','2023','01',100),('凉州','2023','02',100),('凉州','2023','03',100),('荆州','2023','01',100),('荆州','2023','02',100),('荆州','2023','03',100),('徐州','2023','01',100),('徐州','2023','02',100),('徐州','2023','03',100);
2.2测试结果:
对测试数据按照城市、年份分为不同的组,再根据月份正序逐月累计交易额。
--测试SQLSELECT city,yearid,monthid,sum(money_num )over(PARTITION by city,yearid order by monthid) sum_overfrom test_sumover;