数据准备
```sql
create table if not exists temp_ljy as
select 'jack' as name, '2017-01-01' as orderdate, 10 as cost
union all
select 'tony' as name, '2017-01-02' as orderdate, 15 as cost
union all
select 'jack' as name, '2017-02-03' as orderdate, 23 as cost
union all
select 'tony' as name, '2017-01-04' as orderdate, 29 as cost
union all
select 'jack' as name, '2017-01-05' as orderdate, 46 as cost
union all
select 'jack' as name, '2017-04-06' as orderdate, 42 as cost
union all
select 'tony' as name, '2017-01-07' as orderdate, 50 as cost
union all
select 'jack' as name, '2017-01-08' as orderdate, 55 as cost
union all
select 'mart' as name, '2017-04-08' as orderdate, 62 as cost
union all
select 'mart' as name, '2017-04-09' as orderdate, 68 as cost
union all
select 'neil' as name, '2017-05-10' as orderdate, 12 as cost
union all
select 'mart' as name, '2017-04-11' as orderdate, 75 as cost
union all
select 'neil' as name, '2017-06-12' as orderdate, 80 as cost
union all
select 'mart' as name, '2017-04-13' as orderdate, 90 as cost
;
```
count、sum、MIN、MAX、AVG
select
name,orderdate,cost,
sum(cost) over() as c,
sum(cost) over(partition by name) as c1,
sum(cost) over(partition by name order by orderdate) as c2,
sum(cost) over(partition by name order by orderdate rows between unbounded preceding and current row) as c3,
sum(cost) over(partition by name order by orderdate rows between 2 preceding and current row) as c4,
sum(cost) over(partition by name order by orderdate rows between current row and 2 following) as c5,
sum(cost) over(partition by name order by orderdate rows between 2 preceding and 2 following) as c6
from
temp_ljy;
first_value与last_value
select
name,orderdate,cost,
row_number() over(partition by name order by cost) c1,
first_value(cost) over(partition by name order by cost) c2,
last_value(cost) over(partition by name order by cost) c3,
first_value(cost) over(partition by name order by cost desc)c4,
last_value(cost) over(partition by name order by cost desc) c5
from
temp_ljy;
lead与lag(位移函数)
select
name,orderdate,cost,
lead(cost) over(partition by name order by cost) c1,
lead(cost,2) over(partition by name order by cost)c2 ,
lead(cost,2,9999) over (partition by name order by cost) c3,
lag(cost) over (partition by name order by cost) c4,
lag(cost,2) over (partition by name order by cost) c5,
lag(cost,2,-1) over(partition by name order by cost) c6
from
temp_ljy;
RANK、ROW_NUMBER、DESCE_RANK排序函数
select
name,orderdate,cost,c,
ROW_NUMBER()over(partition by name order by c)c1,
RANK()over(partition by name order by c)c2,
DENSE_RANK()over(partition by name order by c)c3
from(
select name,orderdate,cost,date_format(orderdate,'yyyyMM') c
from temp_ljy)t1;
NTILE分组函数
select name,orderdate,cost,
ntile(1) over(partition by name order by orderdate) c1,
ntile(2) over(partition by name order by orderdate) c2,
ntile(3) over(partition by name order by orderdate) c3,
ntile(4) over(partition by name order by orderdate) c4
from
temp_ljy;
select
*
from
(select
name,orderdate,cost,
ntile(5) over(order by orderdate) c
from
temp_ljy
)T
where c=1;
cume_dist和percent_rank百分比函数
select name,orderdate,cost,
cume_dist() over(order by orderdate),
cume_dist() over(partition by name order by orderdate)
from temp_ljy;
select name,orderdate,cost,
sum(1) over(partition by name),
rank() over(order by orderdate),
percent_rank() over(order by orderdate),
PERCENT_RANK()over(partition by name order by orderdate)
from temp_ljy;
本文源自blog.csdn.net/hyunbar/art…