MySQL实现分组取组内特定数据的功能
需求:在MySQL5.7环境下,查询下面表中,各个学科前两名的学生的成绩;
1.准备数据
窗机表以及向表中插入数据
创建一张表:
DROP TABLE IF EXISTS `grade`;
CREATE TABLE `grade` (
`id` int(11) DEFAULT NULL,
`kemu` varchar(255) DEFAULT NULL,
`score` int(255) DEFAULT NULL,
`no` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
向表中插入数据:
INSERT INTO `grade` VALUES ('', '语文', '', '');
INSERT INTO `grade` VALUES ('', '数学', '', '');
INSERT INTO `grade` VALUES ('', '英语', '', '');
INSERT INTO `grade` VALUES ('', '语文', '', '');
INSERT INTO `grade` VALUES ('', '数学', '', '');
INSERT INTO `grade` VALUES ('', '数学', '', '');
INSERT INTO `grade` VALUES ('', '语文', '', '');
INSERT INTO `grade` VALUES ('', '英语', '', '');
INSERT INTO `grade` VALUES ('', '英语', '', '');
INSERT INTO `grade` VALUES ('', '数学', '', '');
2.MySQL编写语句
SELECT * from (
SELECT g.id,g.kemu,g.score,count(*) as rank from grade g
LEFT JOIN grade g1
on g.kemu=g1.kemu
and g.score<=g1.score
GROUP BY g.id,g.kemu,g.score
ORDER BY g.id,g.kemu,g.score desc
) n where rank<=2 ORDER BY kemu,rank
通过函数方式实现可以参考下面的链接:
https://www.jianshu.com/p/32e8c40372b3
http://blog.51cto.com/mydbs/2159794?source=dra
MySQL实现分组取组内特定数据的功能的更多相关文章
- MySQL查询-分组取组中某字段最大(小)值所有记录
最近做东西的时候,用到一个数据库的查询.将记录按某个字段分组,取每个分组中某个字段的最大值的所有记录.举栗子来说. 已知分数表“score”,包含字段“id", "name&quo ...
- mysql实现分组和组内序号
SELECT CASE WHEN @mid = t.PAY_TIME THEN ELSE END SEQ, @mid := t.PAY_TIME, t.AMOUNTS, t.CHARGE_PRICE, ...
- MYSQL实现分组排序并取组内第一条数据
一.需要实现分组排序并且取组内状态优先级最高的数据 有一张这样的数据表, 需求是根据error_type分组然后取status最小的第一条数据 第一种写法: select t.* from ( sel ...
- Mysql SQL分组取每组前几条记录
按name分组取最大的两个val: [比当前记录val大的条数]小于2条:即当前记录为为分组中的前两条 > (select count(*) from tb where name = a.nam ...
- [SQL]用于提取组内最新数据,左连接,内连接,not exist三种方案中,到底谁最快?
本作代码下载:https://files.cnblogs.com/files/xiandedanteng/LeftInnerNotExist20191222.rar 人们总是喜欢给出或是得到一个简单明 ...
- sql 分组后 组内排名
语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) 简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW ...
- SQL ROW_NUMBER()实现取组内最新(最大)的数据
SELECT * FROM(select ROW_NUMBER() over(partition BY sid order by cscore desc) as tid,sid,cname,cscor ...
- oracle 根据字段分组后,将组内的数据根据字段排序
row_number() over(partition by 分组字段 order by 排序字段 desc)
- MySQL中分组取第一条, 以及删除多余的重复记录
检查重复记录 -- 检查重复code1 select count(identity) num, identity from event_log where code='code1' order by ...
随机推荐
- 本博客不再更新和维护,后续文章会在掘金和GitHub发布,感兴趣的小伙伴可以掘金搜索王振宇,谢谢
本博客不再更新和维护,后续文章会在掘金和GitHub发布,感兴趣的小伙伴可以掘金搜索王振宇,谢谢
- 复习下CSS-零碎要点
一,CSS选择器 1. h1 > strong {color:red;}表示的是只有h1下子元素才是红色,“孙子”就不行. 2. h1 + p {margin-top:50px;} 选择 ...
- oracle data type
NUMBER ( precision, scale) precision表示数字中的有效位.如果没有指定precision的话,Oracle将使用38作为精度. scale表示数字小数点右边的位数,s ...
- 解题报告 『机器翻译(vector)』
原题地址 本想练习一下模拟,不过用vector貌似可以轻松水过?(虽然还是模拟) 但突然发现貌似我并不会判断单词是否在内存中出现过? 最后还是靠度娘解决了. 代码如下: #include <bi ...
- Python的内置方法——补充
七 __setitem__,__getitem__,__delitem__ class Foo: def __init__(self,name): self.name=name def __getit ...
- PYTHON的前端部分
CSS部分,CSS起到修饰HTML的作用比如颜色,字体,等等. css如何和HTML共同其作用,那么CSS有几种引入HTML的方式 那么当引入了CSS如何让css对应的使相应的HTML标签上起作用,就 ...
- Windows文本文件上传至linux显示乱码解决方法
iconv -f gbk -t UTF-8 显示异常文本名 -o 另存为文件名 iconv -f gbk -t UTF-8 rkgxdt_new.log -o new
- Python闭包举例
Python闭包的条件: 1.函数嵌套.在外部函数内,定义内部函数. 2.参数传递.外部函数的局部变量,作为内部函数参数. 3.返回函数.外部函数的返回值,为内部函数. 举例如下: def line_ ...
- tomcat 发布后中文乱码问题
接口收到数据,使用Eclipse运行调试中文正常显示,发布到Tomcat后中文出现乱码情况: 解决方法: tomcat启动时默认使用系统编码,可更改tomcat bin目录下catalina.bat文 ...
- C# 将DataTable转换成list (--分页--) 【Skip--Take】
将DataTable转换成list 及数据分页: /// <summary> /// 酒店评论列表-分页 /// </summary> /// <param name=& ...