mysql按照学生分组查询_MySQL分组查询获取每个学生前n条分数记录(分组查询前n条记录)...

本文介绍了如何在MySQL中按照学生分组查询,并获取每个学生分数记录的前n条数据,详细讲解了查询语句的构建过程和逻辑。
摘要由CSDN通过智能技术生成

CREATE TABLE `t_test` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`stuid` varchar(36) NOT NULL,

`score` int(11) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

INSERT INTO `testdb`.`t_test` (`id`, `stuid`, `score`) VALUES ('', '', '');

INSERT INTO `testdb`.`t_test` (`id`, `stuid`, `score`) VALUES ('', '', '');

INSERT INTO `testdb`.`t_test` (`id`, `stuid`, `score`) VALUES ('', '', '');

INSERT INTO `testdb`.`t_test` (`id`, `stuid`, `score`) VALUES ('', '', '');

INSERT INTO `testdb`.`t_test` (`id`, `stuid`, `score`) VALUES ('', '', '');

INSERT INTO `testdb`.`t_test` (`id`, `stuid`, `score`) VALUES ('', '', '');

INSERT INTO `testdb`.`t_test` (`id`, `stuid`, `score`) VALUES ('', '', '');

INSERT INTO `testdb`.`t_test` (`id`, `stuid`, `score`) VALUES ('', '', '');

INSERT INTO `testdb`.`t_test` (`id`, `stuid`, `score`) VALUES ('', '', '');

INSERT INTO `testdb`.`t_test` (`id`, `stuid`, `score`) VALUES ('', '', '');

测试数据

c51b953ad0834e32d6dc21a0dfa71786.png

SELECT *,

(SELECT count(id) FROM t_test t2

where t1.stuid=t2.stuid AND

t2.score>t1.score -- 获取t2大于t1的记录数

)as maxcnt

from t_test t1

9d8546accf36e02a0a23462b1cab7a39.png

到这一步就很简单了.其实只要根据情况取macnt的数据就行了,如果要取前2条,那么筛选maxcnt<2的数据即可.

(如111学生大于99的有0条,大于90的有1条,大于34的有2条,那么要取最高分的前3条,就是maxcnt<3)

SELECT *

FROM t_test t1

WHERE

(

SELECT count(id) FROM t_test t2

where t2.stuid=t1.stuid and t2.score>t1.score

)<3

ORDER BY stuid asc,score DESC

效果图

a78c4b5a60de649f8a06fb96e564c76a.png

mysql 查询每个分组前N条记录

mysql 查询每个分组前N条记录 假设存在表movie,  有字段 id, part(地区), mcount(观看次数) 现查询每个地区观看次数最多的3部movie, 则表 ###id虽未存在gro ...

mysql按字段分组并获取每个分组按照某个字段排序的前三条

这是原始数据 想按照brand_id分组 并获取每个分组total_num最高的前3位 SQL语句为: > (select count(*) from data where brand_id = ...

&period;Net程序员学用Oracle系列&lpar;21&rpar;:分组查询&lpar;GROUP BY&rpar;

1.GROUP BY 标准分组 1.1.GROUP BY 概述 1.2.WHERE 和 HAVING 的区别? 2.GROUP BY 扩展分组 2.1.ROLLUP 分组 2.2.CUBE 分组 2. ...

mysql分组查询前n条数据

建表: CREATE TABLE hard(id INT,aa varchar(50) ,bb INT,PRIMARY key(id))insert into hard values(1,'a',9) ...

mysql获取所有分类的前n条记录的两种方法浅析

项目中有个需求是获取出展会分类下的前n条展商. 刚开始的思路是用group by 获取出展会的分类,后面再根据分类获取该分类下的n个展商,但也需要第一次获取出展会的时候也获取所有的每个展会分类下的 ...

mysql数据库从删库到跑路之select单表查询

一 介绍 本节内容: 查询语法 关键字的执行优先级 简单查询 单条件查询:WHERE 分组查询:GROUP BY HAVING 查询排序:ORDER BY 限制查询的记录数:LIMIT 使用聚合函数查 ...

mysql单列去重复group by分组取每组前几条记录加order by排序

mysql分组取每组前几条记录(排名) 附group by与order by的研究,需要的朋友可以参考下 --按某一字段分组取最大(小)值所在行的数据 复制代码代码如下: /* 数据如下: name ...

《Entity Framework 6 Recipes》中文翻译系列 &lpar;18&rpar; -----第三章 查询之结果集扁平化和多属性分组

翻译的初衷以及为什么选择来学习,请看本系列开篇 3-14  结果集扁平化 问题 你有一对多关联的两个实体,你想通过一个查询,获取关联 ...

SQL 分组后获取其中一个字段最大值的整条记录

--有id,name,createDate的一张表testTable--根据name分组,获取每组中createDate最大的那条记录(整条)查询出来------------------------- ...

随机推荐

实战中总结出来的CSS常见问题及解决办法

一.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值. 二.同一个的class选择符可以在一个文档中重复出现,而id选择符却只能出现一次.对 一个标签同时使用cla ...

对 Linux 专家非常有用的 20 个命令

原文链接:http://www.oschina.net/translate/20-advanced-commands-for-linux-experts?from=20130811 对中级 Linux ...

搭建docker私有仓库 笔记

抄送消息到企业微圈 avalon组件 twitterCopy/twitterCopy 说明 说明 说明 说明 说明 说明 该组件提供接口 开发者可以吧 有需要分享到微圈的的信息 发布到微圈中去. 应用 ...

Redis发布订阅机制

1. 什么是Redis Redis是一个开源的内存数据库,它以键值对的形式存储数据.由于数据存储在内存中,因此Redis的速度很快,但是每次重启Redis服务时,其中的数据也会丢失,因此,Redis也 ...

RecyclerView的滚动事件OnScrollListener研究

(1)滚动事件分类 列表的滚动一般分为两种: 1.手指按下 -> 手指拖拽列表移动 -> 手指停止拖拽 -> 抬起手指 2.手指按下 -> 手指快速拖拽后抬起手指 -&gt ...

sql server递归日期

在做项目任务时,需要将一个日期范围转换为日期表. 例如:日期范围(2017年01月21日~2017年02月20日).转换成一日为单位的日期表,如下. 2017-01-21 2017-01-22 201 ...

Java实现冒泡排序算法

一.基本思路: 冒泡排序是一种简单的交换类排序.其基本思路是,从头开始扫描待排序的元素,在扫描过程中依次对相邻元素进行比较,将关键字值大的元素后移.每经过 一趟排序后,关键字值最大的元素将移到末尾,此 ...

bazel-demo2&lowbar;1

demo2_1目录树 ├── app │ ├── BUILD │ ├── hello_world.cpp │ └── lib │ ├── BUILD │ ├── func.cpp │ └── func ...

matlab学习之求解函数的根和极小值

只是用来求解函数的部分一个根,具体算法没查询,只是调用自带的函数 代码如下 % 求函数零点和极小值 xiszero=func(0) x=-1:0.1:1.5; y=func(x); plot(x,y) ...

Quadtrees UVA - 297

题目链接:https://vjudge.net/problem/UVA-297 题目大意:如上图所示,可以用一个四分树来表示一个黑白图像,方法是用根节点表示整副图像,然后把行列各等分两等分,按照图中的 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值