Hive01---分组排序{row_number,rank,dense_rank}

网友投稿 1249 2022-09-02

Hive01---分组排序{row_number,rank,dense_rank}

Hive01---分组排序{row_number,rank,dense_rank}

分组排序常用的是row_number函数,hive中可以使用,但是mysql里没有这个函数。row_number不能满足分组排序的所有场景,比如处理秩。因此,可以考虑其他函数。Talk is cheap,Show me the code。

建立临时表

新建临时表,插入测试数据

-- create tabel and insert test dataDROP TABLE IF EXISTS parquet_myd.aa_ld_test;CREATE TABLE parquet_myd.aa_ld_test (id int ,name string ,value int,gmt_create timestamp);INSERT INTO TABLE parquet_myd.aa_ld_test(id,name,value,gmt_create) VALUES (1,'A',10,'2018-05-20 18:30:30'),(1,'A',20,'2018-05-20 18:30:30'),(1,'A',30,'2018-05-20 19:30:30'),(2,'A',40,'2018-05-20 18:30:30'),(2,'A',50,'2018-05-20 19:30:30');

Row_number

分组排序时,如果出现相同大小的值,随机排序,随机指定大小(不确定,总之不是一样的序号)。一图胜千言,看图说话。

--row_number()----遇到相同的排序,随机指定大小SELECT *, row_number()over(partition BY id ORDER BY gmt_create ASC) AS rmFROM parquet_myd.aa_ld_test

Rank

和row_number不同,rank遇到相同排序值,赋予同样的序号,但是下一个值的序号要计算中间相同值的个数。具体逻辑见下图:

--rank()----遇到x个相等的排序值,则序号相同,均为n,下一个值的序号为n+x+1SELECT *, rank()over(partition BY id ORDER BY gmt_create ASC) AS rmFROM parquet_myd.aa_ld_test

Dense_Rank

和rank类似,遇到相同的值,序号相同,但是下一个值不统计前面相同值的个数,直接+1即可。具体如下:

--DENSE_RANK()----遇到x个相等的排序值,则序号相同,均为n,下一个值的序号为n+1SELECT *, DENSE_RANK()over(partition BY id ORDER BY gmt_create ASC) AS rmFROM parquet_myd.aa_ld_test

Ref

2018-06-13 于南京建邺区新城科技园

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:PyPackage01---Pandas03_排序sort_values
下一篇:PHP开发api接口安全验证的实例,值得一看(用php连接api接口对接)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~