给个MySQL例子参考

-----查询每门课程的前2名成绩

CREATE   TABLE   StudentGrade( 
stuId   CHAR(4),         --学号 
subId   INT,                 --课程号 
grade   INT,                 --成绩 
PRIMARY   KEY   (stuId,subId) 

GO 
--表中数据如下 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '001 ',1,97); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '001 ',2,50); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '001 ',3,70); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '002 ',1,92); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '002 ',2,80); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '002 ',3,30); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '003 ',1,93); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '003 ',2,95); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '003 ',3,85); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '004 ',1,73); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '004 ',2,78); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '004 ',3,87); 
GO 
 
--查看数据 
select   *   from   StudentGrade

--假如出现并列时,也只取两个同学的话。 
--方法一: 
select   distinct   * 
from   studentgrade   as   t1 
where   stuid   in 
(select   top   2   stuid 
  from   studentgrade   as   t2 
  where   t1.subid=t2.subid 
                  order   by   t2.grade   desc) 
order   by   subid,   grade   desc

--方法二: 
select   *   from   StudentGrade   a   where   (select   count(1)   from   studentGrade   where   subId=a.subId   and   grade> =a.grade) <=2

--方法三: 
select   *   from   StudentGrade   t 
where   (select   count(1)   from   StudentGrade   where   subid=t.subid   and   grade> t.grade) <=1 
order   by   subId,grade   desc

--结果

drop   table   StudentGrade

分组后取每组内排名的Top N的SQL语句的更多相关文章

  1. mysql 分组后取每个组内最新的一条数据

    首先,将按条件查询并排序的结果查询出来. mysql order by accepttime desc; +---------------------+------+-----+ | acceptti ...

  2. MSSQL 分组后取每组第一条(group by order by)

    查询中经常遇到这种查询,分组后取每组第一条.分享下一个SQL语句: --根据 x 分组后.根据 y 排序后取第一条 select * from ( select ROW_NUMBER() over(p ...

  3. ROWNUMBER() OVER( PARTITION BY COL1 ORDER BY COL2)用法,先分组,然后在组内排名,分组计算,主表与附表一对多取唯一等

    ROWNUMBER() OVER( PARTITION BY COL1 ORDER BY COL2)用法 今天在使用多字段去重时,由于某些字段有多种可能性,只需根据部分字段进行去重,在网上看到了row ...

  4. 记一次有意思的 SQL 实现 → 分组后取每组的第一条记录

    开心一刻 今天,朋友气冲冲的走到我面前 朋友:我不是谈了个女朋友,谈了三个月嘛,昨天我偷看她手机,你猜她给我备注什么 我:备注什么? 朋友:舔狗 2 号! 我一听,气就上来了,说道:走,找她去,这婆娘 ...

  5. oracle分组后取每组第一条数据

    数据格式: 分组取第一条的效果: sql语句: SELECT * FROM ( ;

  6. MySQL 分组后取每组前N条数据

    与oracle的 rownumber() over(partition by xxx  order by xxx )语句类似,即:对表分组后排序 创建测试emp表 1 2 3 4 5 6 7 8 9 ...

  7. oracle 分组后取每组第一条数据

    ‘数据格式 分组取第一条的效果 sql SELECT * FROM (SELECT ROW_NUMBER() OVER(PARTITION BY x ORDER BY y DESC) rn, test ...

  8. sql 用Group by分组后,取每组的前几条记录

    转自:http://blog.163.com/jeson_lwj/blog/static/135761083201052411115783/ --查询每门课程的前2名成绩 CREATE TABLE S ...

  9. java stream 处理分组后取每组最大

    有一个需求功能:先按照某一字段分组,再按照另外字段获取最大的那个 Map<String, HitRuleConfig> configMap = configList.parallelStr ...

随机推荐

  1. FFmpeg 移植 Android

    近期项目需要解析苹果的HLS流媒体协议,而FFmpeg从0.11.1“Happiness”版本开始,才增加了对HLS协议的支持.目前网上关于FFmpeg编译移植的文章有很多,但大多都是对旧版本的说明. ...

  2. 多元一次方程解法 C++

    #include<iostream> #include<math.h> #include<fstream> #include<stdlib.h> usi ...

  3. Spark SQL 编程API入门系列之SparkSQL的依赖

    不多说,直接上干货! 不带Hive支持 <dependency> <groupId>org.apache.spark</groupId> <artifactI ...

  4. SignalR——聊天室的实现

    秒懂——SignalR ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能是指这样一种功能:当所连 ...

  5. python中set集合的使用

    集合(set):把不同的元素组成一起形成集合,是python基本的数据类型. python 的集合类型和 其他语言类似, 是一个无序不重复元素集 基本功能包括关系测试和消除重复元素.集合对象还支持un ...

  6. 移动端 | table 布局

    <table border=” cellspacing="> <caption>表格标题</caption> <tr> <td alig ...

  7. 维基百科 MediaWiki API 解析

    使用开放的 API 做一个自己的小项目,是一个很好的学习方法.但好像开放的 API 选择并不多.这里给大家多一个选择,简单介绍一下维基百科使用的 MediaWiki API. 简介 先简单介绍几个容易 ...

  8. markdown写作软件推荐

    最近发现了一款不错的编辑器,而且是全平台支持的.与其它一些 markdown 编辑器最大的不一样是——所见即所得,不再是一边源文件一遍预览的方式了. 总的说来 Typora 很赞,推荐一波. 点此前往 ...

  9. WiFi相关基础概念

    转自:https://blog.csdn.net/lbaihao/article/details/73250798 一.WiFi相关基础概念 1.什么是wifi 我们看一下百度百科是如何定义的: Wi ...

  10. JavaScript学习笔记(第二天)

    数组 为什么要学习数组 之前学习的数据类型,只能存储一个值(比如:Number/String.我们想存储班级中所有学生的姓名,此时该如何存储? 数组的概念 所谓数组,就是将多个元素(通常是同一类型)按 ...