1瞻润、背景
窗口函數(shù)的引入是為了解決 想要既顯示聚集前的數(shù)據(jù),又要顯示聚集后的數(shù)據(jù)硼补。
開窗函數(shù)對一組值進(jìn)行操作利花,不需要使用GROUP BY子句對數(shù)據(jù)進(jìn)行分組微酬,能夠在同一行中同時返回基礎(chǔ)行的列和聚合列。
2橄务、常見用法
over() 按所有行進(jìn)行分組
over(partition by xxx) 按xxx分組的所有行進(jìn)行分組
over(partition by xxx order by aaa) 按xxx分組幔托,按列aaa排序 的按到當(dāng)前行(含當(dāng)前行)進(jìn)行分組
over前可以加聚合函數(shù) 例如sum count avg min max等
over前也可以加 first_value last_value等
windows 字句 用來制定累加的方式
rank() over等的用法
參考資料:https://blog.csdn.net/qq_26937525/article/details/54925827
1、LAG(col,n,DEFAULT) 用于統(tǒng)計窗口內(nèi)往上第n行值
2蜂挪、LEAD(col,n,DEFAULT) 用于統(tǒng)計窗口內(nèi)往下第n行值
3重挑、FIRST_VALUE(column)取分組內(nèi)排序后,截止到當(dāng)前行棠涮,第一個值
4谬哀、LAST_VALUE(column)取分組內(nèi)排序后,截止到當(dāng)前行严肪,最后一個值
5史煎、row_number() 分組排序功能,row_number()從1開始,為每一條分組記錄返回一個數(shù)字 (在row_number中排序的時候驳糯,可以通過NULLS LAST篇梭、NULLS FIRST來控制有NULL的輸出)
這里L(fēng)AG、LEAD統(tǒng)計窗口內(nèi)往上或者往下第N行值的情況 是基于自己當(dāng)前行去做的操作
參考資料:http://lxw1234.com/archives/2015/04/190.htm
3酝枢、row_number()用法
用法
ROW_NUMBER() OVER()函數(shù)用來為每條記錄返回一個行號很洋,可以用來對記錄進(jìn)行排序并返回該序號,序號從1開始排序
over()是聚集函數(shù)隧枫,可以給記錄進(jìn)行分組喉磁、排序谓苟;row_number()不能單獨(dú)使用,必須搭配over()才能使用
具體用例
1协怒、給數(shù)據(jù)添加序號
比如示例
hive> select * from test;
OK
河北 滄州 1001
北京 北京 1002
遼寧 沈陽 1003
吉林 長春 1004
河北 秦皇島 1005
遼寧 大連 1006
河北 廊坊 1007
如果需要隨便添加一個序號的話 可以使用 row_number() over()
如果需要排序分組的話 在over 中添加想要分組或者排序的字段