一、常见窗口函数函数
OVER()
- 指定分析函数工作的数据窗口大小,这个数据窗口的大小可能会随着行的变化而变化。
CURRENT ROW
- 当前行
n PRECEDING
- 往前n行数据
n FOLLOWING
- 往后n行数据
UNBOUNDED
- 起点,UNBOUNDED PRECEDING表示从前面的起点,UNBOUNDED FOLLOWING表示到后面的终点
LAG(col, n)
- 往前第n行数据
LEAD(col, n)
- 往后第n行数据
NTILE(n)
- 把有序分区中的行分发到指定数据的组中,各个组有编号,编号从1开始,对于每一行,NTILE返回此行所属的组的编号。注意:n必须为int类型。
二、案例实操
2.1 数据准备 business表
1 | name,orderdate,cost |
2.2 查询在2017年4月份购买过的顾客及总人数
1 | select name, count(*) over() |
2.3 查询顾客的购买明细及月购买总额
1 | select name, orderdate, cost, sum(cost) over(partition by substring(ordergate, 1, 7)) |
2.4 上述的场景,要将cost按照日期进行累加
1 | select name,orderdate,cost, |
2.5 查询顾客上次的购买时间
1 | select name, orderdate, cost, lag(orderdate, 1, '1900-01-01') over(partition by name, order by orderdate) as time1 |
2.6 查询前20%时间的订单信息
1 | select * |