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_name order by num limit 10;

2) 取top10品牌下各品牌的top10渠道

Select a.* from(

Select 品牌,渠道,count/sum/其他() as num, row_number() over(partition by 品牌,order by num desc) rank

From tb_name

Where 品牌限制条件

Group by 品牌,渠道

)a

Where a.rank<=10;

3) 取top10品牌下各品牌的top10渠道中各渠道的top10档期

Select a.* from(

Select 品牌,渠道,档期,count/sum/其他() as num, row_number() over(partition by 品牌,渠道,order by num desc) rank

From tb_name

Where 品牌,渠道 限制条件

Group by 品牌,渠道,档期

)a

Where a.rank<=10;

时间: 2024-12-26 20:38:02

hive分组排序函数 分组取top10的相关文章

MySQL进阶5--分组排序和分组查询 group by(having) /order by

MySQL进阶--分组排序和分组查询 group by(having) /order by /* 介绍分组函数 功能:用做统计使用,又称为聚合函数或组函数 1.分类: sum, avg 求和 /平均数, 只处理数值型,都绝对忽略NULL值(avg处理时统计的个数没有null项) max ,min ,可以求字符串最大最小 ,可以匹配日期,都绝对忽略NULL值 count ,不计算NULL ,不把null算进数里 #2. 参数支持类型 SELECT MIN(last_name) ,MAX(last_

分组排序取次数

原文:分组排序取次数 函数 row_number() row_number() over (partition by patient_id /*需要分组的列*/ order by zyid /*排序的列*/) sqlSELECT ZYID, patient_id ,row_number() over (partition by patient_id order by zyid) visit_id from jk_patient_in_hospital oracle create or repla

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

[MySQL] 分组排序取前N条记录以及生成自动数字序列,类似group by后 limit

前言:         同事的业务场景是,按照cid.author分组,再按照id倒叙,取出前2条记录出来.        oracle里面可以通过row_number() OVER (PARTITION BY cid,author ORDER BY id DESC) 表示根据cid,author分组,在分组内部根据id排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的),而mysql数据库就没有这样的统计函数,需要自己写复杂的sql来实现. 1,录入测试数据 USE csd

关于oracle分组排序取值的问题

按照 某字段分组 某字段排序 然后取出该分组中排第1条数据(每组只取一条) SELECT* FROM( SELECT a.*,row_number() over(partition by ORI_FEE_ID order by MODIFY_TIME DESC) cn FROM AGENT_RESERVE_FEE_RATE a ) WHERE cn = 1; - MODIFY_TIME 排序字段- ORI_FEE_ID 分组字段- cn 为取值区间

Oracle 高级排序函数 和 高级分组函数

高级排序函数: [ ROW_NUMBER()| RANK() | DENSE_RANK ] OVER (partition by xx order by xx) 1.row_number() 连续且递增的数字 1 2 3 4   row_number() over (partition by xx order by xx )    --学生表中按照所在专业分组,同专业内按成绩倒序排序,成绩相同则按学号正序排序,并给予组内等级select row_number() over(partition b

mysql 按表达式或函数分组、多个字段分组、排序

按表达式或函数分组: #案例:按员工的姓名的长度分组,查询每一组的员工个数,筛选员工个数大于五 SELECT COUNT(*),LENGTH(last_name) FROM employees GROUP BY LENGTH(last_name) HAVING COUNT(*)>5; 按多个字段分组:#案例:查询每个部门每个工种的员工的平均工资 SELECT AVG(salary),department_id,job_id FROM employees GROUP BY department_i

mysql或者oracle分组排序取前几条数据

mysql: select a.* from(select t1.*,(select count(*)+1 from 表 where 分组字段=t1.分组字段 and 排序字段<t1.排序字段) as group_idfrom 表 t1) awhere a.group_id<=3 Oracle: SELECT t.*            FROM (SELECT ROW_NUMBER() OVER(PARTITION BY 分组字段 ORDER BY 排序字段 DESC) rn,      

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