MySQl查询前三名(包括并列)
有时候会遇到这样的需求,那就是需要查询出前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查询前三名(包括并列)相关推荐
- mysql查询分数前三个_MySql根据总成绩查询前三名学生的每科成绩分数
MySql根据总成绩查询前三名学生的每科成绩分数 1年前 阅读 2765 评论 0 喜欢 0 ## 一.数据库结构: ```sql CREATE TABLE `chengji` ( `uid` int ...
- mysql查询前5条记录_各个数据库中,查询前n条记录的方法
SQL查询前10条的方法为: 1.select top X * from table_name --查询前X条记录,可以改成需要的数字,比如前10条. 2.select top X * from ...
- mysql查询前20条数据_SQL Server查询前N条记录的常用方法小结
本文实例讲述了SQL Server查询前N条记录的常用方法.分享给大家供大家参考.具体如下: SQL Server查询前N条记录是我们经常要用到的操作,下面对SQL Server查询前N条记录的方法作 ...
- mysql查询前100行和后100行
查询前100行 SELECT * FROM table LIMIT 100; 查询后100行 select * from table order by id desc limit 100: 查询第6- ...
- Mysql 查询前24小时、3条离当前时间最近的记录
Mysql 查询以当前时间往后的24小时内的数据 register_date >=(NOW() - interval 24 hour) 例如: select * from sys_user W ...
- mysql 查询前两名_Mysql:查询每门课程成绩的前两名
一张成绩表,查询每门课程的前两名,咋一看无从下手,其实可以理解为表自连接 . 建表语句: CREATE TABLE `Department` ( `Id` int(11) NOT NULL DEFAU ...
- mysql查询前12个月的数据_MySQL 统计过去12个月的数据(包括本月),mysql本月
MySQL 统计过去12个月的数据(包括本月),mysql本月 1.问题 需要统计过去12个月的数据,如现在是2015年4月,那么我们需要统计从2014年5月到2015年4月的数据情况.而这12个月中 ...
- SQL 、MySql 查询前几年、几天、几小时的数据
SQL语句查询最近几年和几月的数据 select DateAdd(Month,-3,getdate()) –返回一个时间,根据这个时间点去查询想要的数据即可 –DateAdd函数的详细说明: –Dat ...
- mysql查询前几笔sql语句_mysql开发常用的几条sql查询语句
mysql开发常用的几条sql查询语句 有需要的朋友可参考一上. 1.计算年龄 如果你有一个人的生日而需要计算这个人的年龄,将下列语句中@dateofbirth替换为生日即可 代码如下 SELECT ...
- mysql查询前五行_性能监控实战
用户响应时间=服务器响应时间+网络时间 系统性能分析思路 (1)整体系统CPU利用率 (2)内存利用率 (3)磁盘I/O的利用率和延迟 (4)网络利用率 cpu CPU:top.vmstat.upti ...
最新文章
- ​2021年机器学习什么风向?谷歌大神Quoc Le:把注意力放在MLP上
- 记录去大搜车的一道笔试题
- java多图片上传json_[Java教程]SpringMVC框架五:图片上传与JSON交互
- 关于数据同步,窗口同步之类
- Velocity语法大全
- 机房配电柜、机柜线缆施工标准做法及线缆入柜方式
- php网站漏洞检测对sql注入漏洞防护
- 2010 February
- elasticsearch_script_02
- 2014 网选 5024 Wang Xifeng's Little Plot
- Qt工作笔记-遍历文件夹里面的所有文件,并在QTreeWidget内显示
- jenkins无法连接仓库:Command “/usr/bin/git ls-remote -h -- https://gitee.com/xxx.git HEAD“ returned
- Spring中为什么实体类不用注入
- 嵌入式程序员基本知识二(转载)
- Java violate变量
- 基础类与基础算法学习
- 牛客网JavaScript(V8)输入输出操作指南
- Xmind 8 pro 软件破解版 思维导图
- python的快捷键查看函数用法_python快捷键与命令函数
- c语言案例分析105,C语言实战105例源码
热门文章
- java poi框架导出excel如何插入特殊字符(复选框勾选)
- 黑马2021最新版 SpringCloud基础篇全技术栈导学(RabbitMQ+Docker+Redis+搜索+分布式)
- Minor, cofactor and adjoint matrix
- word中没文字地方添加下划线方法
- javaSE开发智能问答机器人项目
- 朋友圈点赞图在线生成源码
- JavaScript基础教程之flag的用法
- HBase的rowKey设计技巧
- 【ADNI】数据预处理(2)获取 subject slices
- DatePickerDialog的确定和取消按钮