SELECT a.month,
a.pay_amount,
sum(a.pay_amount) over(order by a.month)
FROM
(SELECT month(dt) as month,
sum(pay_amount) as pay_amount
FROM user_trade
WHERE year(dt)='2018'
GROUP BY month(dt)) as a;
2017-2018年每月支付总额和当年累积支付总额
SELECT a.year,
a.month,
a.pay_amount,
sum(a.pay_amount) over(partition by a.year order by a.month)
FROM
(SELECT year(dt) as year,
month(dt) as month,
sum(pay_amount) as pay_amount
FROM user_trade
WHERE year(dt) in (2017,2018)
GROUP BY year(dt),
month(dt)) as a;
partition by 起到分组的作用
order by 按照什么顺序进行累加,升序ASC,降序DESC,默认升序
2. avg(…) over(…)
2018年每个月的近三个月的移动平均支付金额
SELECT a.month,
a.pay_amount,
avg(a.pay_amount) over(order by a.month rows between 2 preceding
and current row)
FROM
(SELECT month(dt) as month,
sum(pay_amount) as pay_amount
FROM user_trade
WHERE year(dt)='2018'
GROUP BY month(dt)) as a;
3. 语法总结
sum(...A...) over(partition by ...B... order by ...C... rows between ...D1... and ...D2...)
avg(...A...) over(partition by ...B... order by ...C... rows between ...D1... and ...D2...)
A:需要被加工的字段名称
B:分组的字段名称