窗口函數(shù)分為聚合函數(shù)和分析函數(shù):
分析函數(shù)用于計(jì)算基于組的某種聚合值舍沙,它和聚合函數(shù)的不同之處是:對(duì)于每個(gè)組返回多行普监,而聚合函數(shù)對(duì)于每個(gè)組只返回一行俱饿。
聚合函數(shù):
COUNT撮珠、SUM沮脖、MIN、MAX芯急、AVG
分析函數(shù):前三個(gè)常用
ROW_NUMBER() 從1開始勺届,按照順序,生成分組內(nèi)記錄的序列
RANK() 生成數(shù)據(jù)項(xiàng)在分組中的排名娶耍,排名相等會(huì)在名次中留下空位
DENSE_RANK() 生成數(shù)據(jù)項(xiàng)在分組中的排名免姿,排名相等會(huì)在名次中不會(huì)留下空位
CUME_DIST 小于等于當(dāng)前值的行數(shù)/分組內(nèi)總行數(shù)。比如榕酒,統(tǒng)計(jì)小于等于當(dāng)前薪水的人數(shù)胚膊,所占總?cè)藬?shù)的比例
PERCENT_RANK 分組內(nèi)當(dāng)前行的RANK值-1/分組內(nèi)總行數(shù)-1
NTILE(n) 用于將分組數(shù)據(jù)按照順序切分成n片,返回當(dāng)前切片值想鹰,如果切片不均勻紊婉,默認(rèn)增加第一個(gè)切片的分布。NTILE不支持ROWS BETWEEN辑舷,比如 NTILE(2) OVER(PARTITION BY cookieid ORDER BY createtime ROWS BETWEEN 3 PRECEDING AND CURRENT ROW)喻犁。
over從句:用來添加條件
使用PARTITION BY語句,使用一個(gè)或者多個(gè)原始數(shù)據(jù)類型的列?
使用PARTITION BY與ORDER BY語句,使用一個(gè)或者多個(gè)數(shù)據(jù)類型的分區(qū)或者排序列
窗口從句條件(窗口子句):
ROWS BETWEEN * AND *
RANGE BETWEEN * AND *
PRECEDING:往前
FOLLOWING:往后
CURRENT ROW:當(dāng)前行
UNBOUNDED:無界限(起點(diǎn)或終點(diǎn))
UNBOUNDED PRECEDING:表示從前面的起點(diǎn)
UNBOUNDED FOLLOWING:表示到后面的終點(diǎn)
sum(sales) OVER(PARTITION BY user_type ORDER BY sales asc ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)