hive 中窗口函数row_number,rank,dense_ran,ntile分析函数的用法
2018-01-25 15:51
561 查看
ive中一般取top n时,row_number(),rank,dense_ran()这三个函数就派上用场了,
先简单说下这三函数都是排名的,不过呢还有点细微的区别。
通过代码运行结果一看就明白了。
示例数据:
sql语句
结果
从结果看出
rank() 排序相同时会重复,总数不会变
dense_rank()排序相同时会重复,总数会减少
row_number() 会根据顺序计算
正好听到一个需求,求sal前50%的人
用这个写了一下,
感觉虽然可以实现,但是有点复杂,有没有更好的方法实现呢
NTILE
NTILE(n),用于将分组数据按照顺序切分成n片,返回当前切片值
NTILE不支持ROWS BETWEEN,比如 NTILE(2) OVER(PARTITION BY cookieid ORDER BY createtime ROWS BETWEEN 3 PRECEDING AND CURRENT ROW)
如果切片不均匀,默认增加第一个切片的分布
上面那个例子 正好可以用到这个
先简单说下这三函数都是排名的,不过呢还有点细微的区别。
通过代码运行结果一看就明白了。
示例数据:
1 a 10 |
10 b 17 1 1 1 3 b 13 2 2 2 4 b 12 3 3 3 8 b 11 4 4 4 9 a 16 1 1 1 6 a 15 2 2 2 11 a 14 3 3 3 5 a 14 3 3 4 7 a 13 5 4 5 2 a 12 6 5 6 1 a 10 7 6 7
从结果看出
rank() 排序相同时会重复,总数不会变
dense_rank()排序相同时会重复,总数会减少
row_number() 会根据顺序计算
正好听到一个需求,求sal前50%的人
用这个写了一下,
NTILE
NTILE(n),用于将分组数据按照顺序切分成n片,返回当前切片值
NTILE不支持ROWS BETWEEN,比如 NTILE(2) OVER(PARTITION BY cookieid ORDER BY createtime ROWS BETWEEN 3 PRECEDING AND CURRENT ROW)
如果切片不均匀,默认增加第一个切片的分布
上面那个例子 正好可以用到这个
相关文章推荐
- hive 中窗口函数row_number,rank,dense_ran,ntile分析函数的用法
- Hive窗口和分析函数[RANK()、DENSE_RANK()、ROW_NUMBER()]
- Hive分析窗体函数之NTILE,ROW_NUMBER,RANK和DENSE_RANK
- Oracle分析函数-排序排列(rank、dense_rank、row_number、ntile)
- SQL2005中row_number( )、rank( )、dense_rank( )、ntile( )函数的用法(2)
- 知方可补不足~row_number,rank,dense_rank,ntile排名函数的用法
- SQL2005中row_number( )、rank( )、dense_rank( )、ntile( )函数的用法(2)
- rank(),dense_rank(),row_number()分析函数用法和区别
- SQL2005中row_number( )、rank( )、dense_rank( )、ntile( )函数的用法(2)
- MS SQL 2005 四个排序函数ROW_NUMBER、RANK、DENSE_RANK 和 NTILE简介用法/结果排名排序
- 分析函数ROW_NUMBER,RANK,DENSE_RANK,FIRST,NTILE,RATIO_TO_REPORT等
- SQL2005中row_number( )、rank( )、dense_rank( )、ntile( )函数的用法(2)
- SQL2005中row_number( )、rank( )、dense_rank( )、ntile( )函数的用法(2)
- Oracle分析函数RANK(),DENSE_RANK(),ROW_NUMBER()的用法
- 分析函数(ROW_NUMBER、RANK、DENSE_RANK)的用法
- row_number( )、rank( )、dense_rank( )、ntile( )函数的用法 (SQL2005以上)
- SQL2005中row_number( )、rank( )、dense_rank( )、ntile( )函数的用法
- 排名函数(ROW_NUMBER、RANK、DENSE_RANK)及OVER子句 Oracle 中分析函数用法之--rank(),dense_rank(),partition,over()
- SQL2005中row_number()、rank()、dense_rank()、ntile()函数的用法
- SQL2005中row_number( )、rank( )、dense_rank( )、ntile( )函数的用法