Hive sql 查询数据库查询 top-n
数据库查询*分组排序取top n
要求:按照课程分组,查找每个课程最高的两个成绩。
数据文件如下:
第一列no为学号,第二列course为课程,第三列score为分数
mysql> select * from lesson;
+-------+---------+-------+
| no | course | score |
+-------+---------+-------+
| N0101 | Marth | 100 |
| N0102 | English | 12 |
| N0102 | Chinese | 55 |
| N0102 | History | 58 |
| N0102 | Marth | 25 |
| N0103 | English | 100 |
| N0103 | Chinese | 87 |
| N0103 | History | 88 |
| N0103 | Marth | 72 |
| N0104 | English | 20 |
| N0104 | Chinese | 60 |
| N0104 | History | 88 |
| N0104 | Marth | 56 |
| N0105 | English | 56 |
| N0105 | Chinese | 88 |
| N0105 | History | 88 |
| N0201 | English | 66 |
| N0201 | Chinese | 77 |
| N0201 | History | 80 |
| N0201 | Marth | 100 |
| N0202 | English | 35 |
| N0202 | Chinese | 56 |
| N0202 | History | 86 |
| N0202 | Marth | 99 |
| N0203 | English | 100 |
| N0203 | Chinese | 87 |
| N0203 | History | 88 |
| N0203 | Marth | 57 |
| N0204 | English | 98 |
| N0204 | Chinese | 100 |
| N0204 | History | 66 |
| N0204 | Marth | 71 |
| N0205 | English | 98 |
| N0205 | Chinese | 100 |
| N0205 | History | 66 |
| N0205 | Marth | 71 |
| N0301 | English | 66 |
| N0301 | Chinese | 89 |
| N0301 | History | 68 |
| N0301 | Marth | 83 |
| N0302 | English | 76 |
| N0302 | Chinese | 99 |
| N0302 | History | 80 |
| N0302 | Marth | 74 |
| N0303 | English | 100 |
| N0303 | Chinese | 100 |
| N0303 | History | 88 |
| N0303 | Marth | 57 |
| N0304 | English | 76 |
| N0304 | Chinese | 100 |
| N0304 | History | 66 |
| N0304 | Marth | 86 |
| N0305 | English | 98 |
| N0305 | Chinese | 100 |
| N0305 | History | 40 |
| N0305 | Marth | 59 |
| N0306 | English | 52 |
| N0306 | Chinese | 87 |
| N0306 | History | 72 |
| N0306 | Marth | 71 |
| N0101 | Chinese | 55 |
| N0101 | History | 84 |
| N0101 | English | 82 |
| N0101 | English | 82 |
+-------+---------+-------+
64 rows in set
在hive上查询
select a.course,a.score
from
(
select course,score,row_number() over(partition by course order by score desc) as n
from lesson
)a
where a.n<=2;
其中:
row_number() over(partition by course order by score desc)
意思是以课程分组,按成绩递减排序,并为每组中的数据打上行号的标记,从1开始。
这样,再在外层套一层过滤行号小于等于2的即可:-D
原文:https://blog.csdn.net/wguangliang/article/details/50167283
Hive sql 查询数据库查询 top-n的更多相关文章
- 转载 50种方法优化SQL Server数据库查询
原文地址 http://www.cnblogs.com/zhycyq/articles/2636748.html 50种方法优化SQL Server数据库查询 查询速度慢的原因很多,常见如下几种: 1 ...
- 优化SQL Server数据库查询方法
SQL Server数据库查询速度慢的原因有很多,常见的有以下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列 ...
- SQL Server数据库--》top关键字,order by排序,distinct去除重复记录,sql聚合函数,模糊查询,通配符,空值处理。。。。
top关键字:写在select后面 字段的前面 比如你要显示查询的前5条记录,如下所示: select top 5 * from Student 一般情况下,top是和order by连用的 orde ...
- 50种方法优化SQL Server数据库查询
查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 ...
- [译]LINT TO SQL 介绍(数据库查询) - Part.3
出处:Linq To Sql (Part.3 – Querying our database) 术语表 Built-in:内置的 Clause:子句 Debugger:调试器 Object Relat ...
- (五)SQL入门 数据库查询
什么是查询?查询就是Select语句对数据库的探究. 查询是一种目的,一种需求,一种期望.是Select语句去实现的.Select语句不是只是指select语句,而是多个子句一起使用得组合. sele ...
- sql server数据库查询同义词
查询数据库同义词: select * from sys.synonyms, 查询同义词个数:select count(1) from sys.synonyms
- sql server数据库查询取出重复数据记录
问题:博主在2011年6月,广东技术师范大学大四的时候,从学校计算机科学学院网站看到招聘信息并到广东中原地产IT部面试,很清楚记得当时的面试题目:怎么从数据库里面查询重复记录. 解决方案:在sql s ...
- LinQ to sql 各种数据库查询方法
1.多条件查询: 并且 && 或者 || var list = con.car.Where(r => r.code == "c014" || r.oil == ...
随机推荐
- Spring-boot加载resources下的文件
加载方式: FileInputStream keyStoreIn = new FileInputStream(ResourceUtils.getFile("classpath:ca/clie ...
- angularJS 事件广播与接收[转]
路由的事件 事件这个词在前端出现的频率真是高,根本拦不住,哪都是.$route服务在路由过程中的每个阶段都会触发不同的事件,可以为这些不同的路由事件设置监听器并做出响应. 一共有4个事件用来监听路由的 ...
- Scala的Class、Object和Apply()方法
Scala中如果一个Class和一个Object同名,则称Class是Object的伴生类.Scala没有Java的Static修饰符,Object下的成员和方法都是静态的,类似于Java里面加了St ...
- Aerospike系列:2:商业版和社区版的比较
http://www.aerospike.com/products-services
- Mongostat 2.6详解
Mongostat C:\Users\John>Mongostat connected to: 127.0.0.1 insert query update delete getmore comm ...
- ajax请求,返回值为304 Not Modified 错误原因与解决办法
先说原因吧,这是因为http请求的缓存问题引起的 前后调用了两个相同的请求,服务器懒得给你重新发一个请求,所以就304咯 那怎么办呢? 解决方法也很简单,加一个时间戳就行了 比如: 原请求为: $.g ...
- 三分钟彻底禁用、隐藏Android设备底部虚拟按钮(亲测有效)
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7613970.html Android设备屏幕底部一般都有虚拟导航栏,上面有 back.home等按钮. ...
- 移植到windows下的iconv
This is a short memo about installing iconv on Windows host (specifically: Windows 7 SP1 x64). Iconv ...
- 删除现有的Recipient再重新添加选中的Contacts
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super. ...
- yum安装nodejs 8
Install Node.js 8 on Enterprise Linux Distributions To install Node.js 8 on Enterprise Linux distros ...