Mysql取得分组的前n名
参考https://blog.csdn.net/junzi528/article/details/84404412
建表与数据sql
/*
Navicat MySQL Data TransferSource Server : 127.0.0.1
Source Server Version : 50553
Source Host : localhost:3306
Source Database : test1Target Server Type : MYSQL
Target Server Version : 50553
File Encoding : 65001Date: 2019-12-27 11:30:57
*/SET FOREIGN_KEY_CHECKS=0;-- ----------------------------
-- Table structure for studentgrade
-- ----------------------------
DROP TABLE IF EXISTS `studentgrade`;
CREATE TABLE `studentgrade` (`stuId` varchar(22) DEFAULT NULL,`subId` int(11) DEFAULT NULL,`grade` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of studentgrade
-- ----------------------------
INSERT INTO `studentgrade` VALUES ('001', '1', '99');
INSERT INTO `studentgrade` VALUES ('003', '1', '12');
INSERT INTO `studentgrade` VALUES ('002', '1', '16');
INSERT INTO `studentgrade` VALUES ('004', '1', '56');
INSERT INTO `studentgrade` VALUES ('003', '2', '99');
INSERT INTO `studentgrade` VALUES ('002', '2', '0');
INSERT INTO `studentgrade` VALUES ('004', '2', '11');
INSERT INTO `studentgrade` VALUES ('001', '2', '33');
INSERT INTO `studentgrade` VALUES ('004', '3', '22');
INSERT INTO `studentgrade` VALUES ('003', '3', '67');
INSERT INTO `studentgrade` VALUES ('001', '3', '88');
INSERT INTO `studentgrade` VALUES ('002', '3', '88');
数据表展示
语句sql
select * from studentgrade a where (select count(1) from studentgrade b where
b.subId=a.subId and b.grade>=a.grade)<=2
order by a.subid,a.grade desc
思路
核心思路:要算出某人成绩在第几名,可以转换成:算出他一共比多少人成绩高。比如,第一名的人,就没其它
人成绩比他更好。第三名的人,就有两个人成绩比他好。
where语句可以理解为,把表中的每一行记录,都去与给定的where条件作对比,满足的再查出来。也就是有
个遍历的过程。
分析过程
Mysql取得分组的前n名相关推荐
- mysql查询总成绩的前3名学生信息
mysql查询总成绩的前3名学生信息 mysql 8.0+版本 mysql8.0下 mysql 8.0+版本 使用窗口函数 mysql8.0下 select id,STATUS,@rank1 :=@r ...
- mysql 取分组数据的前几名(1)
目前有需求需要取分组数据的前几名,有如下的解决方案来实现 具体数据库如下 SQL写法: SELECT* FROMstudent_grade AS a WHERE( SELECT coun ( * ) ...
- mysql如何查询成绩前5名_sql 语句查询 前5名后5名的成绩
蝴蝶不菲 两种办法:分别求最大和最小,然后union allselect * from(select * from table order by 成绩) where rownum<=5union ...
- SQL Server 2008 R2——分组取前几名
版权声明:本文为博主原创文章 未经许可不得转载 请通过右侧公告中的"联系邮箱(wlsandwho@foxmail.com)"联系我 未经作者授权勿用于学术性引用. 未经作者授权 ...
- mysql 排名_SQL语句mysql排名、分组后组内排名、取各组的前几名
数据: 一.整体排名(3种) -- 普通排名:从1开始,顺序往下排 set @rank =0;select city , score, @rank := @rank+1 rank from cs or ...
- mysql每学科前两名 having_mysql 分组查询前n条数据
今天去面试,碰到一道面试题: 有一个学生成绩表,表中有 表id.学生名.学科.分数.学生id .查询每科学习最好的两名学生的信息: 建表sql: CREATE TABLE `stuscore` ( ` ...
- mysql查询每门课程成绩最好的前两名学生id和姓名
创建库:create database db6; 库下面创建表: 班级表: mysql> create table class(cid int not null unique auto_incr ...
- mysql实现分组查询每个班级的前三名
mysql实现分组查询每个班级的前三名set character_set_server = utf8mb4 ; DROP TABLE IF EXISTS student;CREATE TABLE IF ...
- mysql怎么看实例名_南方“中看不中吃”的前4名水果,莲雾只是垫底,你怎么看?...
水果很多人都喜欢吃,南方人可以说是最幸福的,因为南方的水果种类有很多种,而且水果的价格也很便宜,一年四季都能吃到便宜又好吃的水果,南方的很多水果,北方人可能都没有吃过,虽然南方的水果种类多,但是也有一 ...
最新文章
- Codeforces Beta Round #92 (Div. 1 Only) A. Prime Permutation 暴力
- 在Windows Server 2008的桌面上显示“我的电脑”“网上邻居”等图标?
- Java程序员之完美代码
- windows:(1)xmind常用快捷键
- HTML5 中Web存储问题
- labview 快捷键
- win10窗口设置眼睛保护色
- NFC卡模拟之模拟卡ID
- 2021华为秋招算法工程师面试经历(实习过)
- Esp8266对接阿里云物联网远程实时温度监控{探讨帖}
- 探讨大数据时代如何规划智慧城市
- Excel高级功能 数据工具
- 如何删除电脑里的android驱动程序,【教程】安卓手机系统自带程序卸载
- Unity小游戏之闯关小游戏
- 闪烁?卡顿?CSS硬件加速了解一下(will-change属性详解)
- 固定电话+手机号码 正则表达式
- 【Bio】基础生物学 - 基本氨基酸 amino acids
- JMeter安装及环境配置
- 软件项目成本估算中,软件项目外包人月费用一个月是按几天算?
- 虚拟化六大安全问题 解决刻不容缓
热门文章
- solr4.10和solr5.x ik分词器配置,(Deprecated--2017-04-23)
- Iframe高度自适应(兼容IEFirefox、同域跨域)
- FCN训练自己的数据集及测试
- [深度学习基础] 深度学习基础及数学原理
- OpenCV文字绘制函数putText()的使用
- 甲骨文中国公司如何如何打赢这场裁员翻身仗?
- Rokid发布YodaOS 并宣布代码开源
- JDK5.0新特性系列---11.4线程 Condition
- 关系数据库NoSQL数据库
- WebStorm 10支持TypeScript 1.4到JavaScript的实时编译