数据库查询*分组排序取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的更多相关文章

  1. 转载 50种方法优化SQL Server数据库查询

    原文地址 http://www.cnblogs.com/zhycyq/articles/2636748.html 50种方法优化SQL Server数据库查询 查询速度慢的原因很多,常见如下几种: 1 ...

  2. 优化SQL Server数据库查询方法

    SQL Server数据库查询速度慢的原因有很多,常见的有以下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列 ...

  3. SQL Server数据库--》top关键字,order by排序,distinct去除重复记录,sql聚合函数,模糊查询,通配符,空值处理。。。。

    top关键字:写在select后面 字段的前面 比如你要显示查询的前5条记录,如下所示: select top 5 * from Student 一般情况下,top是和order by连用的 orde ...

  4. 50种方法优化SQL Server数据库查询

    查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 ...

  5. [译]LINT TO SQL 介绍(数据库查询) - Part.3

    出处:Linq To Sql (Part.3 – Querying our database) 术语表 Built-in:内置的 Clause:子句 Debugger:调试器 Object Relat ...

  6. (五)SQL入门 数据库查询

    什么是查询?查询就是Select语句对数据库的探究. 查询是一种目的,一种需求,一种期望.是Select语句去实现的.Select语句不是只是指select语句,而是多个子句一起使用得组合. sele ...

  7. sql server数据库查询同义词

    查询数据库同义词: select * from sys.synonyms, 查询同义词个数:select count(1) from sys.synonyms

  8. sql server数据库查询取出重复数据记录

    问题:博主在2011年6月,广东技术师范大学大四的时候,从学校计算机科学学院网站看到招聘信息并到广东中原地产IT部面试,很清楚记得当时的面试题目:怎么从数据库里面查询重复记录. 解决方案:在sql s ...

  9. LinQ to sql 各种数据库查询方法

    1.多条件查询: 并且 && 或者 || var list = con.car.Where(r => r.code == "c014" || r.oil == ...

随机推荐

  1. 【树莓派】服务配置相关2:基于RPi Desktop的服务配置

    该文接续之前写过的一篇:[树莓派]服务配置相关. 这是我个人用来进行树莓派盒子安装配置的脚本,对于外部其他博友,可以部分参考,但不需要逐个引用. 现在有一定更新,部分按如下脚本来操作: step1: ...

  2. 【树莓派】树莓派与XBMC及Kodi、LibreELEC插件(二)

    之前的相关文章参考: [树莓派]树莓派与XBMC及Kodi.LibreELEC插件(一) [树莓派]树莓派与XBMC及Kodi.LibreELEC插件(二) [树莓派]树莓派与XBMC及Kodi.Li ...

  3. bootstrap——强大的网页设计元素模板

    本文介绍一个网页设计工具——bootstrap,它包含了很多华丽的按钮及排版,我们可以在网页设计中直接使用它,尤其是加入我们只是想简单的使用一下的话,将会是一个不错的选择,下面是几张examples, ...

  4. MySQL auto_increment初始值设置

    http://blog.csdn.net/u011439289/article/details/48055917 DROP TABLE IF EXISTS zan1; CREATE TABLE zan ...

  5. debian下配置网络 安装无线网卡驱动 Broadcom BCMXX系列

    解决方案来自于debian官网  https://wiki.debian.org/wl 1.加入源 deb http://http.debian.net/debian/ wheezy main c ...

  6. 【Linux 驱动】Netfilter/iptables (八) Netfilter的NAT机制

    NAT是Network Address Translation的缩写,意即"网络地址转换". 从本质上来说,是通过改动IP数据首部中的地址,以实现将一个地址转换成还有一个地址的技术 ...

  7. SSH使用Log4j

    1. 将Jar文件log4j-1.2.14.jar导入项目. 2. 在src文件夹下新建log4j.properties文件: log4j.rootLogger = debug,stdout,D,E ...

  8. Exchanger的使用

    两个线程可以交换对象的同步点.每个线程都在进入 exchange 方法时给出某个对象,并接受其他线程返回时给出的对象. 用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先 ...

  9. Linux下设置oracle环境变量

    Linux设置Oracle环境变量 方法一:直接运行export命令定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新s ...

  10. spring 配置bean的方法及依赖注入发方式

    Bean 的配置方式:通过全类名(反射).通过工厂方法(静态工厂方法 & 实例工厂方法).FactoryBean 这里依据全类名配置bean <bean id="helloWo ...