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 ...
随机推荐
- Python 特殊方法
1 _int_ 定义在类中,创建类的实例的时候回先调用此方法,用于对该类的一些初始化(例如变量初始化) 2 _str_ def _str_(self): return "this is a ...
- HttpClient设置连接超时时间
https://www.cnblogs.com/winner-0715/p/7087591.html 使用HttpClient,一般都需要设置连接超时时间和获取数据超时时间.这两个参数很重要,目的是为 ...
- AutoCompleteExtender 使用示例
绑定 KeyValuePair,网上很多例子,没有找到绑定键值对的,msdn上有例子,备忘一下. using FirstElite.Verify.Entity; using System; using ...
- 在<canvas>上绘制img(drawImage())时需要注意的事
<canvas>标签相当于是一个画布,css决定画布的样式(这块画布的背景颜色.大小等),脚本(一般使用JavaScript)就是画笔,我们可以在这个画布上绘制线条.形状.文字.图片等. ...
- Breakout 打砖块
发售年份 1976 发售平台 多平台 开发商 雅达利(Atari) 类型 动作 https://www.youtube.com/watch?v=AMUv8KvVt08
- C# System.Collections
System.collection类: 动态数组ArrayList 代表了可被单独索引的对象的有序集合.也就是说他是一个动态的数组,你可以通过索引来进行增删改等操作,数组会自动调整数组的大小.允许在列 ...
- Eclipse中Java build path的使用
1.Eclipse中,工程属性的Java Build Path的Library标签页下,有如下几个按钮:Add Jars...添加JAR包,是指本Eclipse当前包含的工程中的,在工程列表下选取即可 ...
- C# 控制CH341进行SPI,I2C读写
之前看了别人是C++ MFC开发的CH341 I2C,SPI读写flash的软件代码,看上去有点头晕,感觉还是使用C# winform开发更人性化些 C#控制需要调用CH341提供的DLL库,网上多数 ...
- express中遇到的一个小问题“403”
这样子的一个express简单项目文件执行会出现403 Forbidden的错误: var express = require('express'); var app = express(); app ...
- Tomcat 启动报错:host-manager does not exist or is not a readable directory
http://blog.csdn.net/yh88356656/article/details/50519120 新安装一个Tomcat,我们肯定会删除Tomcat Webapps下的自带项目,在考入 ...