ROW_NUMBER,RANK(),DENSE_RANK()

先了解这三个之间的区别:

Rank():1,2,2,4,5(一般用这个较多,不会影响总排名)

Dense_rank():1,2,2,3,4,5(会影响最终排名)

Row_number():1,2,3,4,5,6(按照行数显示)

语法格式:row_number() OVER (partition by COL1 order by COL2 desc ) rank
partition by:类似hive的建表,分区的意思;
order by :排序,默认是升序,加desc降序;
rank:表示别名
表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)

取TOPN数据

按照国家提取TOP3

样本数据:

国家 城市 Visitors
阿联酋,阿布扎比,137
阿联酋,阿布扎比,146
阿联酋,阿布扎比,178
阿联酋,阿布扎比,337
阿联酋,阿布扎比,178
阿联酋,阿布扎比,227
阿联酋,阿布扎比,157
阿联酋,迪拜,144
阿联酋,迪拜,268
阿联酋,迪拜,103
阿联酋,迪拜,141
阿联酋,迪拜,108
阿联酋,迪拜,266
澳大利亚,悉尼,141
澳大利亚,悉尼,122
澳大利亚,悉尼,153
澳大利亚,悉尼,128
澳大利亚,墨尔本,294
澳大利亚,墨尔本,230
澳大利亚,墨尔本,159
澳大利亚,墨尔本,188
澳大利亚,堪培拉,249
澳大利亚,堪培拉,378
澳大利亚,堪培拉,255
澳大利亚,堪培拉,240

导入数据

 --执行下述语句
hive (temp)> hive -f 'HQL/loaddata.hql'>out/tmp;
-----------------------------------------------
drop table temp.tripdata;
CREATE table datatable (
country string,
city string,
Visitors int)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE; load data local inpath 'home/loaddata'
overwrite into table temp.tripdata;
---------------------------------------------- ----------------------------------------------
--查看结果
hive (temp)> select * from tripdata;
country city visitors

阿联酋 阿布扎比 137
阿联酋 阿布扎比 146
阿联酋 阿布扎比 178
阿联酋 阿布扎比 337
阿联酋 阿布扎比 178
阿联酋 阿布扎比 227
阿联酋 阿布扎比 157
阿联酋 迪拜 144
阿联酋 迪拜 268
阿联酋 迪拜 103
阿联酋 迪拜 141
阿联酋 迪拜 108
阿联酋 迪拜 266
澳大利亚 悉尼 141
澳大利亚 悉尼 122
澳大利亚 悉尼 153
澳大利亚 悉尼 128
澳大利亚 墨尔本 294
澳大利亚 墨尔本 230
澳大利亚 墨尔本 159
澳大利亚 墨尔本 188
澳大利亚 堪培拉 249
澳大利亚 堪培拉 378
澳大利亚 堪培拉 255
澳大利亚 堪培拉 240
 select country,city,visitors
from tripdata
order by visitors desc
limit 5; country city visitors

澳大利亚 堪培拉 378
阿联酋 阿布扎比 337
澳大利亚 墨尔本 294
阿联酋 迪拜 268
阿联酋 迪拜 266

按照国家、提取城市TOP3

 select a.*
from (
select country,city,visitors, row_number() over (partition by country order by visitors desc ) rank
from tripdata
order by country,visitors desc
) a
where a.rank<=3; --结果
a.country a.city a.visitors a.rank
结果如下:
澳大利亚 堪培拉 378 1
澳大利亚 墨尔本 294 2
澳大利亚 堪培拉 255 3
阿联酋 阿布扎比 337 1
阿联酋 迪拜 268 2
阿联酋 迪拜 266 3

按照城市提取TOP3

 select a.*
from (
select country,city,visitors, row_number() over (partition by city order by visitors desc ) rank
from tripdata
order by country,city,visitors desc
) a
where a.rank<=3;

--结果
a.country a.city a.visitors a.rank
澳大利亚 堪培拉 378 1
澳大利亚 堪培拉 255 2
澳大利亚 堪培拉 249 3
澳大利亚 墨尔本 294 1
澳大利亚 墨尔本 230 2
澳大利亚 墨尔本 188 3
澳大利亚 悉尼 153 1
澳大利亚 悉尼 141 2
澳大利亚 悉尼 128 3
阿联酋 迪拜 268 1
阿联酋 迪拜 266 2
阿联酋 迪拜 144 3
阿联酋 阿布扎比 337 1
阿联酋 阿布扎比 227 2
阿联酋 阿布扎比 178 3

hive求TopN语句的更多相关文章

  1. 第2节 网站点击流项目(下):3、流量统计分析,分组求topN

    四. 模块开发----统计分析 select * from ods_weblog_detail limit 2;+--------------------------+---------------- ...

  2. [PY3]——求TopN/BtmN 和 排序问题的解决

    需求 K长的序列,求TopN K长的序列,求BtmN 排序问题 解决 heap.nlargest().heap.nsmallest( ) sorted( )+切片 max( ).min( ) 总结和比 ...

  3. 吴超老师课程--Hive的执行语句

    为什么选择Hive? (1)基于Hadoop的大数据的计算/扩展能力(2)支持SQL like查询语言(3)统一的元数据管理(4)简单编程 一:Hive的数据类型(1)基本数据类型tinyint/sm ...

  4. hive 添加UDF(user define function) hive的insert语句

    add JAR /home/hadoop/study/study2/utf.jar; package my.bigdata.udf; import org.apache.hadoop.hive.ql. ...

  5. Hive——基本DML语句

    Hive--基本DML语句 DML:Data Manipulation Language(数据操作语言,与关系型数据库相似) 官方手册:https://cwiki.apache.org/conflue ...

  6. Hive——基本DDL语句

    Hive--基本DDL语句 DDL:Data Definition Language(数据定义语言,与关系型数据库相似) 官方手册:https://cwiki.apache.org/confluenc ...

  7. Hive的HQL语句及数据倾斜解决方案

    [版权申明:本文系作者原创,转载请注明出处] 文章出处:http://blog.csdn.net/sdksdk0/article/details/51675005 作者: 朱培          ID ...

  8. Hadoop学习之路(二十)MapReduce求TopN

    前言 在Hadoop中,排序是MapReduce的灵魂,MapTask和ReduceTask均会对数据按Key排序,这个操作是MR框架的默认行为,不管你的业务逻辑上是否需要这一操作. 技术点 MapR ...

  9. 求SQL语句递归的算法

    表结构是这样的 部门    上级部门    A           BB           CC           DA           AB           BC           C ...

随机推荐

  1. iTOP-4418开发板支持Android4.4/5.1.1系统、Linux3.4.39、QT2.2/4.7/5.7、Ubuntu12.04

    核心板参数 尺寸:50mm*60mm 高度:核心板连接器组合高度1.5mm PCB层数:6层PCB沉金设计 4418 CPU:ARM Cortex-A9 四核 S5P4418处理器 1.4GHz 68 ...

  2. proxysql系列 ~ 运维相关

    一 常用命令   //实时加载   load mysql servers to runtime; mysql_server   load mysql users to runtime; mysql_u ...

  3. python 机器学习三剑客 之 Matplotlib

    Matplotlib介绍: Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形 . 通过 Matplotlib,开发者可以仅需要几 ...

  4. CentOS7中启动Chrome报错ERROR:zygote_host_impl_linux.cc

    网上查的解决了问题 1. 需要安装libexif 说明我已经安装了libexif 2. 从安全角度考虑,Chrome不应在root环境下运行,如果某些原因必须以root身份运行Chrome,可以运行下 ...

  5. LightOJ 1372 (枚举 + 树状数组)

    题目 Link 输出序列中有多少个组合 {a1,a2,a3,a4,a5,a6}可以构成一个六边形. 分析 序列每个数都不相等. 所以可以设 a1<a2<a3<a4<a5< ...

  6. WPF 10天修炼 第十天- WPF数据绑定

    WPF数据绑定 数据绑定到元素属性是将源对象指定为一个WPF元素,并且源属性是一个依赖属性,依赖属性内置了变更通知.当改变源对象依赖属性值之后,绑定目标可以立即得到更新,开发人员不需要手动编写响应事件 ...

  7. springboot idea 代码更改自己编译设置

    第一步:在pom.xml文件中添加springboot 编译依赖 <dependency> <groupId>org.springframework.boot</grou ...

  8. tomcat启动后产生的日志

    产生的日志  相当于 定时选取webapps里面搜索有没有超时的session,然后将超时的session关掉. 每一个webapp 都是独立的 一个application对应一个context,se ...

  9. IntelliJ IDEA安装ideaIU-2019.1

  10. OPPO A3在哪里打开usb调试模式的详细教程

    当我们使用电脑通过数据线连接上安卓手机的时候,如果手机没有开启Usb开发者调试模式,电脑则无办法成功读到我们的手机,这时我们需要找方法将手机的Usb开发者调试模式打开,这里我们叙述OPPO A3如何开 ...