开窗函数(Hive的开窗函数)

管理员 2024-11-25 11:35:45 0
开窗函数和聚合函数的区别:sql标准允许将所有聚合函数用作开窗函数,用over关键字区分开窗函数和聚合函数聚合函数每组只返回一个值,开窗函数每组可以返回多个值举例:rum_number()-----作为开窗函数 over (parition by ()----作为聚合函数)开窗函数的种类:row_number() over():对相等的值不进行区分,相等的值对应的排名相同,序号从1到n连续rank() over():相等的值排名相同,但若有相等的值,则序号从1到n不连续,若有两个人都排在第三名,则没有第4名Hive的开窗函数

dense_rank() over():对相等的值排名相同,但序号从1到n连续,如果又两个人都排在第一名,则排在第2名(假设仅有1个第二名)的人是第3个人Hive的开窗函数

ntile(n) over():可以看作是把有序的数据集合平均分配到指定的数据n的桶中,将桶号分配给每一行,排序对应的数据为桶号,如果不能平均分配,则较小的桶分配额外的行,并且各个桶中能放的数据条数最多相等Hive的开窗函数

paercent_rank():排名计算公式:(current rank - 1)/(total number of rows -1),说明:分组内当前行的rank值-1/分组内总行数-1,自己理解:分组内的当前行数rank-1的意思是:所查询的行数在第几行在减去1,分组内总行数-1意思是;分了几组比如4组,那么就是4-1Hive的开窗函数

窗口分析函数:cume_dist:如按升序排列,则统计;小于等于当前值的行数/总行数(number of rows ≤ current row)/(total number of rows),如果是降序比例,则统计:大于等于当前值的行数/总行数,自己理解;和我一样的工资在员工中所占的比例Hive的开窗函数

统计大于等于当前工资的人数占总人数的比例(就是把排序desc要不要加的问题,大于就加desc)Hive的开窗函数

lead(value_expr[,offset[default]]):用于统计窗口内往下第n行值,第一个参数为列名,第二个参数为往下第n行(可选,默认为1),第三个参数为默认值(往下第n行为null时候,取默认值,若不指定,则为null)Hive的开窗函数

lag(value_expr[,offset[,default]]):与lead相反,用于统计窗口内往上第n行值,第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(往上第n行为null时候,取默认值,如不指定,则为null)Hive的开窗函数

first_value:取分组内排序后,截止到当前行,第一个值(不加desc就是每个部门最低的工资,先分组在排序后取最低还是最高,相当于返回的是第一行)Hive的开窗函数

last_value:取分组内排序后,截至到当前行,最后一个值(先分组在排序后取最低还是最高)Hive的开窗函数

开窗函数还有:

max(),min(),avg(),count():共性是返回单一值

这些就简单了就不写了

相关文章