hive分组排序 取top N
pig可以轻松获取TOP n。书上有例子
hive中比较麻烦,没有直接实现的函数,可以写udf实现。还有个比较简单的实现方法:
用row_number,生成排名序列号。然后外部分组后按这个序列号多虑,样例代码如下
select a.*
from(
select 品牌,渠道,档期,count/sum/其它() as num row_number() over (partition by 品牌,渠道 order by num desc ) rank
from table_name
where 品牌,渠道 限制条件
group by 品牌,渠道,档期
)a
where a.rank<=10
其实 排序有三个函数
(1)row_number:排序后,顺序下来,相同项按先后顺序排序,1,2,3,4,5
(2)rank:排序后,遇到数据相同项时序号一致,后面并留空一位,比如,1,2,2,4,4,6
dense_rank:在遇到数据相同项时,序号一致,不留空位,如 1,2,2,3,3,4,4,5
具体用例可以参见:http://www.cnblogs.com/dycg/p/4260283.html
我自己设计的代码
##统计国内,各省份的城市排名
select b.*
from
(select country,
province,
city,
cnt,
row_number() over (partition by country,province order by cnt desc) rank
from
(select country,
province,
city,
count(1) as cnt
from tb_pmp_region_report_hive_mapping
where country = '中国'
group by country,province,city
) a
)b
where b.rank<=3
表a统计出基本数据,从a中加排名项。然后,按排名项过滤。内部group后,外部不需要group by
需要注意的是,加排名项时,不应该使用group。
如果有group,那么row_number中的order by项必须是group内的字段,否则报错,如下段代码报错
select b.*
from
(select country,
province,
city,
cnt,
row_number() over (partition by country,province order by cnt desc) rank
from
(select country,
province,
city,
count(1) as cnt
from tb_pmp_region_report_hive_mapping
where country = '中国'
group by country,province,city
) a
group by country,province,city
)b
where b.rank<=3
执行报错:
FAILED: SemanticException Failed to breakup Windowing invocations into Groups. At least 1 group must only depend on input columns. Also check for circular dependencies.
Underlying error: org.apache.hadoop.hive.ql.parse.SemanticException: Line 7:62 Expression not in GROUP BY key ‘cnt’
hive>
hive分组排序 取top N的更多相关文章
- SQL之分组排序取top n
转自:http://blog.csdn.net/wguangliang/article/details/50167283 要求:按照课程分组,查找每个课程最高的两个成绩. 数据文件如下: 第一列no为 ...
- sql分组排序取top
写法1: use anypay; select tr.* from (select task_code, max(created_at) as cal from task_log group by t ...
- SQL Server 分组后取Top N
SQL Server 分组后取Top N(转) 近日,工作中突遇一需求:将一数据表分组,而后取出每组内按一定规则排列的前N条数据.乍想来,这本是寻常查询,无甚难处.可提笔写来,终究是困住了笔者好一会儿 ...
- hive 分组排序,topN
hive 分组排序,topN 语法格式:row_number() OVER (partition by COL1 order by COL2 desc ) rankpartition by:类似hiv ...
- mysql分组排序取最大值所在行,类似hive中row_number() over partition by
如下图, 计划实现 :按照 parent_code 分组, 取组中code最大值所在的整条记录,如红色部分.(类似hive中: row_number() over(partition by)) sel ...
- mysql 分组排序取最值
查各个用户下单最早的一条记录 查各个用户下单最早的前两条记录 查各个用户第二次下单的记录 一.建表填数据: SET NAMES utf8mb4; -- 取消外键约束 ; -- ------------ ...
- Hive分组后取组内排名方法row_number
今天遇到这样一个需求场景,要取出 每一种分类(a,b组合分类) 符合条件的日期(字段c) 距离现在最近的10个日期 的数据 首先想到的是用sql筛选出符合某种条件的所有数据,这样的事情很简单 然后用脚 ...
- 关于oracle分组排序取值的问题
按照 某字段分组 某字段排序 然后取出该分组中排第1条数据(每组只取一条) SELECT* FROM( SELECT a.*,row_number() over(partition by ORI_FE ...
- hive 分组排序函数 row_number() over(partition by " " order by " "desc
语法:row_number() over (partition by 字段a order by 计算项b desc ) rank --这里rank是别名 partition by:类似hive的建表, ...
随机推荐
- Python 装饰器示例
#!/usr/bin/env python # _*_ coding: UTF-8 _*_ # Author:taoke def applePrice(func): def otherfunc(): ...
- pytorch 移动端框架 thnets 附c示例代码
前年年前做一个手机移动端图像识别项目的时候, 先后尝试了mxnet,thnets,caffe,tensorflow. 当时的情况是,mxnet内存管理奇差,内存经常由于模型运算分配不足,app挂掉. ...
- 紧急疏散evacuate
1689: [HNOI2007]紧急疏散evacuate 题目描述 发生了火警,所有人员需要紧急疏散!假设每个房间是一个N M的矩形区域.每个格子如果是".",那么表示这是一块空地 ...
- 51nod 1364 最大字典序排列(线段树)
1364 最大字典序排列基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 给出一个1至N的排列,允许你做不超过K次操作,每次操作可以将相邻的两个数交换,问能够得到的字 ...
- ●BZOJ 3894 文理分科
题链: https://vijos.org/d/ljt12138/p/58c696b8d3d8a16c62a248d4 (要权限号啊...用这个交吧) 题解: 题目大意: N*M的矩阵,每个位置 ...
- hdu5651 xiaoxin juju needs help(逆元)
xiaoxin juju needs help Accepts: 150 Submissions: 966 Time Limit: 2000/1000 MS (Java/Others) Mem ...
- [bzoj4881][Lydsy2017年5月月赛]线段游戏
来自FallDream的博客,未经允许,请勿转载,谢谢. quailty和tangjz正在玩一个关于线段的游戏.在平面上有n条线段,编号依次为1到n.其中第i条线段的两端点坐标分别为(0,i)和(1, ...
- (概念)多个CPU和多核CPU以及超线程(Hyper-Threading)
引言 在这篇文章中我会主要介绍CPU相关的一些重要概念和技术.如果你想更好地了解操作系统,那就从本文开始吧. 中央处理器(Central processing unit) 在我们了解其它概念之前,我们 ...
- 阿里云服务器Centos 7安装PHP
网上各种别人写的博客 我自己配置了一下php 开始安装的是压缩包 结果php -version 无显示 然后查找各种资料 请教了很多人 需要的环境一一配置了,但是虽然出现了安装成功,但是还是无法查看版 ...
- Java transient关键字使用小结
1.transient关键字只能修饰变量,而不能修饰方法和类.注意,本地变量是不能被transient关键字修饰的.2.被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被t ...