load data local inpath '/opt/tmp/order.csv' into table t_window;
窗口函數操作:
1、查詢2015-04月購買的人和人數 select distinct name,count(*) over() from t_window where substring(orderdate,1,7)='2015-04';
2、顯示購買的總金額 select name,orderdate,cost,sum(cost) over() from t_window;
3、顯示月份的總金額 select name,orderdate,cost,sum(cost) over(partition by month(orderdate)) from t_window;
4、綜合練習
select name,orderdate,cost,
sum(cost) over() as sample1,--所有行相加
sum(cost) over(partition by name) as sample2,--按name分組,組內數據相加
sum(cost) over(partition by name order by orderdate) as sample3,--按name分組,組內數據累加
sum(cost) over(partition by name order by orderdate rows between UNBOUNDED PRECEDING and current row ) as sample4 ,--和sample3一樣,由起點到當前行的聚合
sum(cost) over(partition by name order by orderdate rows between 1 PRECEDING and current row) as sample5,--當前行和前面一行做聚合
sum(cost) over(partition by name order by orderdate rows between 1 PRECEDING AND 1 FOLLOWING ) as sample6,--當前行和前邊一行及后面一行
sum(cost) over(partition by name order by orderdate rows between current row and UNBOUNDED FOLLOWING ) as sample7 --當前行及后面所有行
from t_window;
5、ntile函數(分組處理)(執行的話建議單個拎出來執行)
select name,orderdate,cost,ntile(3) over() as sample1,
ntile(3) over(partition by name) as simple2,
ntile(2) over(partition by month(orderdate)) as simple3,
ntile(3) over(partition by name order by cost desc) as simple4
from t_window;
6、rank函數(排名)
select name,orderdate,cost,row_number() over() as r1,
row_number() over(order by name) as r2,
rank() over(order by name) as r3,
DENSE_RANK () over(order by name) as r4
from t_window;
7、lag和lead函數
select name,orderdate,cost,
lag(orderdate,1) over(partition by name order by orderdate) as sample1,
lag(orderdate,1,'1999-10-02') over(partition by name order by orderdate) as sample2,
lead(orderdate,1,'1999-10-02') over(partition by name order by orderdate) as sample3
from t_window;
8、first_value和last_value函數
select name,orderdate,cost,first_value(orderdate) over(partition by name order by orderdate) as time,
last_value(orderdate) over(partition by name order by orderdate) as time
from t_window;