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基础——2、python应用(随机、异常)——(YZ)
本次的内容为python的应用,关于随机.异常的应用,均多应用列表. 习题一 1.初始化一个数据集,包括5-10位同学的成绩数据(数据类型不限),数据格式如下: 学号 姓名 Java C语言 Pyth ...
- creator NDK_PROJECT_PATH=null
NDK_PROJECT_PATH=null 其实不是一个错误= =,少年,不要纠结于此了. 主要问题在于这一句: process_begin: CreateProcess(NULL, E:/Andro ...
- 【Jest】笔记三:全局变量
一.前提 我们在使用unittest,testng框架的时候都知道,每个case都是项目独立的,上一个case返回的值是不能使用到下一个case的,但是实际中接口之间的关系是紧密相连的,这个时候我们怎 ...
- canvas画小叮当
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- git 之路
1. 不要把配置文件放到你的 Git 代码仓库 https://www.oschina.net/translate/dont-include-configs-in-your-git-repos 2. ...
- express中遇到的一个小问题“403”
这样子的一个express简单项目文件执行会出现403 Forbidden的错误: var express = require('express'); var app = express(); app ...
- cocos2dx lua invalid 'cobj' in function 'lua_cocos2dx'
解决方法 在创建 Node节点后 调用父节点 retain() 方法 手动增加引用 一般调用:clone()方法会出现,在变量后面加上对一个对应的retain() 方法
- c# 使用http摘要认证
.net 使用http摘要认证,返回json数据 using System; using System.Collections.Generic; using System.Linq; using Sy ...
- 使用 random() 生成礼包码
需求:生成100个游戏礼包码 具体如下 # 1.构造100个5位随机数 listNumA = [] for n in range(100): listNumA.append(random.randin ...
- RN 获取组件的宽度和高度
https://www.cnblogs.com/zhiyingzhou/p/7471212.html https://blog.csdn.net/calvin_zhou/article/details ...