HIVE分组排序问题

答案:

hive> select *,row_number() over (partition by product_no order by start_time desc) from table1;

知识点:

1、row_number

  1. hive (test)> select *, row_number() over (partition by sub order by score) as od from t; 

2、rank

  1. hive (test)> select *, rank() over (partition by sub order by score) as od from t; 

3、dense_ran

  1. hive (test)> select *, dense_rank() over (partition by sub order by score desc) from t;

业务实例:

统计每个学科的前三名

  1. select * from (select *, row_number() over (partition by sub order by score desc) as od from t ) t where od<=3;

语文成绩是80分的排名是多少

  1. hive (test)> select od from (select *, row_number() over (partition by sub order by score desc) as od from t )t where sub=‘chinese‘ and score=80;

分页查询

  1. hive (test)> select * from (select *, row_number() over () as rn from t) t1 where rn between 1 and 5;
时间: 2024-10-24 00:21:14

HIVE分组排序问题的相关文章

hive分组排序函数 分组取top10

hive分组排序函数 分组取top10 语法:row_number() over( partition by 字段a order by 计算项b desc) rank --这里rank是别名 Partition by:类似hive的建表,分区的意思 这里按字段a分区,对计算项b进行降序排序 实例: 要取top10品牌,各品牌的top10渠道,各品牌的top10渠道中各渠道的top10档期 1) 取top10品牌 Select 品牌,count/sum/其他() as num from tb_na

Hive分组取Top N

Hive在0.11.0版本开始加入了row_number.rank.dense_rank分析函数,可以查询分组排序后的top值 说明: row_number() over ([partition col1] [order by col2]) rank() over ([partition col1] [order by col2]) dense_rank() over ([partition col1] [order by col2]) 它们都是根据col1字段分组,然后对col2字段进行排序,

hive 分组排序,topN

语法格式:row_number() OVER (partition by COL1 order by COL2 desc ) rankpartition by:类似hive的建表,分区的意思:order by :排序,默认是升序,加desc降序:rank:表示别名表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的) -- 分组排序-- 求某用户日期最大的3天select a.* from( select p_day,muuid,r

多层分组排序问题

已知原表数据如下: 要求实现如下效果: --创建表 create table tmp as select '火腿肠' c1, '销售一部' c2,'老王' c3, 1.5 c4 from dual union all select '玉米' c1, '销售五部' c2,'B老刘' c3, 1 c4 from dual union all select '笔记本' c1, '销售一部' c2,'老王' c3, 3 c4 from dual union all select '笔记本' c1, '销

Hive中分组取前N个值

分享两篇文章,结合看更清楚一点. 背景 假设有一个学生各门课的成绩的表单,应用hive取出每科成绩前100名的学生成绩. 这个就是典型在分组取Top N的需求. 解决思路 对于取出每科成绩前100名的学生成绩,针对学生成绩表,根据学科,成绩做order by排序,然后对排序后的成绩,执行自定义函数row_number(),必须带一个或者多个列参数,如ROW_NUMBER(col1, ....),它的作用是按指定的列进行分组生成行序列.在ROW_NUMBER(a,b) 时,若两条记录的a,b列相同

Pig、Hive、MapReduce 解决分组 Top K 问题(转)

问题: 有如下数据文件 city.txt (id, city, value) cat city.txt 1 wh 5002 bj 6003 wh 1004 sh 4005 wh 2006 bj 1007 sh 2008 bj 3009 sh 900需要按 city 分组聚合,然后从每组数据中取出前两条value最大的记录. 1.这是实际业务中经常会遇到的 group TopK 问题,下面来看看 pig 如何解决: 1 a = load '/data/city.txt'  using PigSto

hive实现根据用户分组,按用户记录求上下两条记录的时间差

在mysql,数据如下:#查询某一用户该日抽奖时间 select draw_time from user_draw_log where user_id = 1 and draw_date='2016-03-09' order by id; +---------------------+ | draw_time | +---------------------+ | 2016-03-09 13:52:46 | | 2016-03-09 13:52:53 | | 2016-03-09 13:53:0

hive 排序 分组计数后排序 几种不同函数的效果

[转至:http://blackproof.iteye.com/blog/2164260] 总结: 三个分析函数都是按照col1分组内从1开始排序 (假设4个数,第2和第3个数据相同)    row_number() 是没有重复值的排序(即使两天记录相等也是不重复的),可以利用它来实现分页 比如:1.2.3,4    dense_rank() 是连续排序,两个第二名仍然跟着第三名 :比如:1,2,2,3    rank()       是跳跃拍学,两个第二名下来就是第四名:   比如:1,2,2

Hive 查询中的分组排名

语法:ROW_NUMBER() OVER(PARTITION BY COLUMN<针对排名的字段> ORDER BY COLUMN<需要排名的字段>  (desc<倒序>)) SELECT *, Row_Number() OVER (partition by deptid ORDER BY salary desc) rank FROM employee where rank <= 20: 可查处以deptid字段分组的 salary值最大的前20名