有时候会遇到这样的需求,那就是需要查询出前n名的信息。如果是不考虑并列的情况,那就简单了直接使用
排序加limit便可搞定。但是当考虑并列的情况是就不一样了。那么这个时候该怎么办呢?不废话了,直接讲思路。我们可以把查询分为两部分。**一部分用于查询去除重复条件下的前n名成绩。第二部
分用户取出在这个区间的所有成员信息。**来一个实战:首先是成绩信息表,表名为te:

下面就是sql语句:
select aa.*
from(select DISTINCT name as n1,(select sum(mark) from te where name=n1)as g from te t) aa
where aa.g in(select ta.grade as g from (select (select sum(mark) from te where name=t1.name)as grade from te t1GROUP BY grade desc LIMIT 3) as ta)
看起来很复杂的样子,其实的确挺复杂的。下面来解释一下,首先我们要取出(这里是实现排名前三)在除去重复情
况下的前三名的成绩:
select (select sum(mark) from te where name=t1.name)as grade from te t1 GROUP BY
grade desc LIMIT 3

把每个人的总成绩计算出来,然后通过group by就可以去除重复,”desc“降序排序。limit 3取前三条。
这里使用了关键字limit,由于in后面的条件不能直接跟limit,所以将上面查询出来的结果放到一张ta表里,再进行一次查询。

(select ta.grade as g from (select (select sum(mark) from te where name=t1.name)
as grade from te t1 GROUP BY grade desc LIMIT 3) as ta)
好的,到这里就把去除重复条件下的前三名成绩取出来了。下面就该取学生信息了。通过将总成绩算出来之后,用in
关键字去匹配上面的结果集便可。
那么问题又来了,**我们查出的总成绩是通过计算得出的,并不是表的字段。所以这里要用到别名来保存。但是呢,
我们又要用这个别名去做匹配。好的,我们都知道where后面是不能直接跟上别名的。解决方法跟上面是一样的,就
是先把查出的结果集放到一张表里,然后再进行一次查询便可**
select aa.* from (select DISTINCT name as n1,(select sum(mark) from te where name=n1)
as g from te t) aa where aa.g in (结果集)
查询结果截图:


好的,以上就是我个人的一个解决方法了。那么也希望大家有什么更好的解决方法也能分享给我。
最后方便大家测试,将建表的sql语句以及插入数据的sql语句附在后面:

create table te (
name char(20) ,
lesson char(20),
mark float
) insert into te values('john','Math',60);
insert into te values('john','Eng',50);
insert into te values('john','HIstory',56); insert into te values('Mike','Eng',51);
insert into te values('Mike','Math',59);
insert into te values('Mike','HIstory',55); insert into te values('Mark','Eng',71);
insert into te values('Mark','Math',89);
insert into te values('Mark','HIstory',95); insert into te values('mm','Eng',61);
insert into te values('mm','Math',79);
insert into te values('mm','HIstory',85); insert into te values('f','Eng',51);
insert into te values('f','Math',69);
insert into te values('f','HIstory',95);

MySQl查询前三名(包括并列)相关推荐

  1. mysql查询分数前三个_MySql根据总成绩查询前三名学生的每科成绩分数

    MySql根据总成绩查询前三名学生的每科成绩分数 1年前 阅读 2765 评论 0 喜欢 0 ## 一.数据库结构: ```sql CREATE TABLE `chengji` ( `uid` int ...

  2. mysql查询前5条记录_各个数据库中,查询前n条记录的方法

    SQL查询前10条的方法为: 1.select top X *  from table_name --查询前X条记录,可以改成需要的数字,比如前10条. 2.select top X *  from  ...

  3. mysql查询前20条数据_SQL Server查询前N条记录的常用方法小结

    本文实例讲述了SQL Server查询前N条记录的常用方法.分享给大家供大家参考.具体如下: SQL Server查询前N条记录是我们经常要用到的操作,下面对SQL Server查询前N条记录的方法作 ...

  4. mysql查询前100行和后100行

    查询前100行 SELECT * FROM table LIMIT 100; 查询后100行 select * from table order by id desc limit 100: 查询第6- ...

  5. Mysql 查询前24小时、3条离当前时间最近的记录

    Mysql 查询以当前时间往后的24小时内的数据  register_date >=(NOW() - interval 24 hour) 例如: select * from sys_user W ...

  6. mysql 查询前两名_Mysql:查询每门课程成绩的前两名

    一张成绩表,查询每门课程的前两名,咋一看无从下手,其实可以理解为表自连接 . 建表语句: CREATE TABLE `Department` ( `Id` int(11) NOT NULL DEFAU ...

  7. mysql查询前12个月的数据_MySQL 统计过去12个月的数据(包括本月),mysql本月

    MySQL 统计过去12个月的数据(包括本月),mysql本月 1.问题 需要统计过去12个月的数据,如现在是2015年4月,那么我们需要统计从2014年5月到2015年4月的数据情况.而这12个月中 ...

  8. SQL 、MySql 查询前几年、几天、几小时的数据

    SQL语句查询最近几年和几月的数据 select DateAdd(Month,-3,getdate()) –返回一个时间,根据这个时间点去查询想要的数据即可 –DateAdd函数的详细说明: –Dat ...

  9. mysql查询前几笔sql语句_mysql开发常用的几条sql查询语句

    mysql开发常用的几条sql查询语句 有需要的朋友可参考一上. 1.计算年龄 如果你有一个人的生日而需要计算这个人的年龄,将下列语句中@dateofbirth替换为生日即可 代码如下 SELECT ...

  10. mysql查询前五行_性能监控实战

    用户响应时间=服务器响应时间+网络时间 系统性能分析思路 (1)整体系统CPU利用率 (2)内存利用率 (3)磁盘I/O的利用率和延迟 (4)网络利用率 cpu CPU:top.vmstat.upti ...

最新文章

  1. ​2021年机器学习什么风向?谷歌大神Quoc Le:把注意力放在MLP上
  2. 记录去大搜车的一道笔试题
  3. java多图片上传json_[Java教程]SpringMVC框架五:图片上传与JSON交互
  4. 关于数据同步,窗口同步之类
  5. Velocity语法大全
  6. 机房配电柜、机柜线缆施工标准做法及线缆入柜方式
  7. php网站漏洞检测对sql注入漏洞防护
  8. 2010 February
  9. elasticsearch_script_02
  10. 2014 网选 5024 Wang Xifeng's Little Plot
  11. Qt工作笔记-遍历文件夹里面的所有文件,并在QTreeWidget内显示
  12. jenkins无法连接仓库:Command “/usr/bin/git ls-remote -h -- https://gitee.com/xxx.git HEAD“ returned
  13. Spring中为什么实体类不用注入
  14. 嵌入式程序员基本知识二(转载)
  15. Java violate变量
  16. 基础类与基础算法学习
  17. 牛客网JavaScript(V8)输入输出操作指南
  18. Xmind 8 pro 软件破解版 思维导图
  19. python的快捷键查看函数用法_python快捷键与命令函数
  20. c语言案例分析105,C语言实战105例源码

热门文章

  1. java poi框架导出excel如何插入特殊字符(复选框勾选)
  2. 黑马2021最新版 SpringCloud基础篇全技术栈导学(RabbitMQ+Docker+Redis+搜索+分布式)
  3. Minor, cofactor and adjoint matrix
  4. word中没文字地方添加下划线方法
  5. javaSE开发智能问答机器人项目
  6. 朋友圈点赞图在线生成源码
  7. JavaScript基础教程之flag的用法
  8. HBase的rowKey设计技巧
  9. 【ADNI】数据预处理(2)获取 subject slices
  10. DatePickerDialog的确定和取消按钮