Hive 编号函数

编号函数

row_number ()

仅仅定义组内的数据进行编号 1 2 3 4

rank()

编号的时候 排序字段会参与编号相同的排序字段 标号一致, 总标号不变

dense_rank()

编号的时候 排序字段会参与编号相同的排序字段标号一致, 总标号有可能变小

习题练习

孙悟空 语文 87
孙悟空 数学 95
娜娜 英语 84
宋宋 语文 64
孙悟空 英语 68
宋宋 英语 84
婷婷 语文 65
娜娜 语文 94
宋宋 数学 86
婷婷 数学 85
娜娜 数学 56
婷婷 英语 78

1)先建表 导入数据

create table  tb_sub(
name string ,
subject string ,
score double
)
row format delimited fields terminated by "\t" ;
load data local inpath "/data/stu/" into table  tb_sub ;

在这里插入图片描述

2) 对每门科目的成绩进行排名

select
* ,
rank()  over(partition by subject  order by score desc) rn
from
tb_sub ;

在这里插入图片描述

打地鼠案列练习

u01,1,1
u01,2,0
u01,3,1
u01,6,1
u02,5,1
u02,6,0
u02,7,0
u02,1,1
u02,2,1
u03,4,1
u03,5,1
u03,6,0
u02,3,0
u02,4,1
u02,8,1
u01,4,1
u01,5,0
u02,9,1
u03,1,1
u03,2,1
u03,3,1

1) 建表 导入数据

 create table  tb_ds(
uid string ,
seq int  ,
m int 
)
row format delimited fields terminated by "," ;
load data local inpath "/data/ds/" into table  tb_ds ;

在这里插入图片描述
2) 过滤掉没有命中的记录 , 进行分组 ,排序 , 编号

select
uid ,
seq ,
row_number()  over(partition by uid order by seq) rn
from
tb_ds 
where  m = 1 ;

在这里插入图片描述
3)求出连续命中两次或两次以上的 uid

select
uid , 
max(cnt) mm     最大的 cnt
from
(select
uid , diff ,
count(1)  cnt    总个数
from
(select
uid ,
seq ,
row_number()  over(partition by uid order by seq) rn ,
(seq - (row_number()  over(partition by uid order by seq))) diff 求出命中的次数 
from 
tb_ds 
where  m = 1)t
group by uid , diff
having cnt >=2)t1    总个数大于等于2的
group by uid  ;  过滤 uid

最终结果
在这里插入图片描述

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 黑客帝国 设计师:上身试试 返回首页