需求:在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实现分组取组内特定数据的功能的更多相关文章

  1. MySQL查询-分组取组中某字段最大(小)值所有记录

    最近做东西的时候,用到一个数据库的查询.将记录按某个字段分组,取每个分组中某个字段的最大值的所有记录.举栗子来说. 已知分数表“score”,包含字段“id", "name&quo ...

  2. mysql实现分组和组内序号

    SELECT CASE WHEN @mid = t.PAY_TIME THEN ELSE END SEQ, @mid := t.PAY_TIME, t.AMOUNTS, t.CHARGE_PRICE, ...

  3. MYSQL实现分组排序并取组内第一条数据

    一.需要实现分组排序并且取组内状态优先级最高的数据 有一张这样的数据表, 需求是根据error_type分组然后取status最小的第一条数据 第一种写法: select t.* from ( sel ...

  4. Mysql SQL分组取每组前几条记录

    按name分组取最大的两个val: [比当前记录val大的条数]小于2条:即当前记录为为分组中的前两条 > (select count(*) from tb where name = a.nam ...

  5. [SQL]用于提取组内最新数据,左连接,内连接,not exist三种方案中,到底谁最快?

    本作代码下载:https://files.cnblogs.com/files/xiandedanteng/LeftInnerNotExist20191222.rar 人们总是喜欢给出或是得到一个简单明 ...

  6. sql 分组后 组内排名

    语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) 简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW ...

  7. SQL ROW_NUMBER()实现取组内最新(最大)的数据

    SELECT * FROM(select ROW_NUMBER() over(partition BY sid order by cscore desc) as tid,sid,cname,cscor ...

  8. oracle 根据字段分组后,将组内的数据根据字段排序

    row_number() over(partition by 分组字段 order by 排序字段 desc)

  9. MySQL中分组取第一条, 以及删除多余的重复记录

    检查重复记录 -- 检查重复code1 select count(identity) num, identity from event_log where code='code1' order by ...

随机推荐

  1. ssh 端口更改或ssh 远程接不上的问题(尤其是国外服务器)

    问题: Connecting to 149.*.*.*:22...Connection established.To escape to local shell, press 'Ctrl+Alt+]' ...

  2. c# excel xlsx 保存

    public XSSFWorkbook Excel_Export(DataTable query,string title,int[] rowweight,string[] rowtitle) { X ...

  3. vue重温之mint-ui------------点击事件绑定

    第一次接触mint-ui,在使用它的tabbar时,为了达到点击切换页面的效果,采用了点击事件的方式,然后就碰到了这么个问题: 是的,点击事件是不起作用的. 然后刚好一个朋友也在做这块,而且有一段时间 ...

  4. vue----计算与监听属性

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <meta name=& ...

  5. 去重和分类后缀asp、php等路径 用python3写的

    我们在做渗透的时候肯定会用上扫描器的,本人一般会用御剑,当然你也会喜欢别的工具. 很多时候,能否渗透成功其实还挺依赖与字典的,如果把后台给扫出来了,恰好还弱口令,那么岂不是美滋滋. 因此,有一个好的字 ...

  6. Docker系列(一)CentOS 6.5 离线安装、不升级内核

    本特安装教程特点 1.由于是离线下载,需要提前下载好需要的依赖包 2.使用的版本为Centos6.5 3.不升级内核 4.提供异常解决方案. 安装过程 一.下载依赖包(使用能联网的节点) 依赖包可以自 ...

  7. gdb问题value optimized out

    gdb正常print一个变量的值: 但如果gdb调试程序的时候打印变量值会出现<value optimized out> 情况: 可以在gcc编译的时候加上 -O0参数项,意思是不进行编译 ...

  8. 2、冒泡排序法(C语言)

    一.冒泡算法实现分析 1.假设有5个元素分别为8,6,15,9,3对其进行冒泡排序,我们需要关注的有三点如下: (1)元素个数 n: (2)需要比较的趟数 i: (3)每趟比较的次数 j: 2.它们之 ...

  9. stm32之中断配置

    一.stm32的中断和异常 Cortex拥有强大的异常响应系统,它能够打断当前代码执行流程事件分为异常和中断,它们用一个表管理起来,编号为0~15为内核异常,16以上的为外部中断,这个表就是中断向量表 ...

  10. Elasticsearch-6.7.0系列(五)5044端口 logstash安装

    centos7环境 下载logstash wget https://artifacts.elastic.co/downloads/logstash/logstash-6.7.0.tar.gz      ...