参考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名相关推荐

  1. mysql查询总成绩的前3名学生信息

    mysql查询总成绩的前3名学生信息 mysql 8.0+版本 mysql8.0下 mysql 8.0+版本 使用窗口函数 mysql8.0下 select id,STATUS,@rank1 :=@r ...

  2. mysql 取分组数据的前几名(1)

    目前有需求需要取分组数据的前几名,有如下的解决方案来实现 具体数据库如下 SQL写法: SELECT* FROMstudent_grade AS a WHERE( SELECT coun ( * ) ...

  3. mysql如何查询成绩前5名_sql 语句查询 前5名后5名的成绩

    蝴蝶不菲 两种办法:分别求最大和最小,然后union allselect * from(select * from table order by 成绩) where rownum<=5union ...

  4. SQL Server 2008 R2——分组取前几名

    版权声明:本文为博主原创文章 未经许可不得转载   请通过右侧公告中的"联系邮箱(wlsandwho@foxmail.com)"联系我 未经作者授权勿用于学术性引用. 未经作者授权 ...

  5. mysql 排名_SQL语句mysql排名、分组后组内排名、取各组的前几名

    数据: 一.整体排名(3种) -- 普通排名:从1开始,顺序往下排 set @rank =0;select city , score, @rank := @rank+1 rank from cs or ...

  6. mysql每学科前两名 having_mysql 分组查询前n条数据

    今天去面试,碰到一道面试题: 有一个学生成绩表,表中有 表id.学生名.学科.分数.学生id .查询每科学习最好的两名学生的信息: 建表sql: CREATE TABLE `stuscore` ( ` ...

  7. mysql查询每门课程成绩最好的前两名学生id和姓名

    创建库:create database db6; 库下面创建表: 班级表: mysql> create table class(cid int not null unique auto_incr ...

  8. mysql实现分组查询每个班级的前三名

    mysql实现分组查询每个班级的前三名set character_set_server = utf8mb4 ; DROP TABLE IF EXISTS student;CREATE TABLE IF ...

  9. mysql怎么看实例名_南方“中看不中吃”的前4名水果,莲雾只是垫底,你怎么看?...

    水果很多人都喜欢吃,南方人可以说是最幸福的,因为南方的水果种类有很多种,而且水果的价格也很便宜,一年四季都能吃到便宜又好吃的水果,南方的很多水果,北方人可能都没有吃过,虽然南方的水果种类多,但是也有一 ...

最新文章

  1. Codeforces Beta Round #92 (Div. 1 Only) A. Prime Permutation 暴力
  2. 在Windows Server 2008的桌面上显示“我的电脑”“网上邻居”等图标?
  3. Java程序员之完美代码
  4. windows:(1)xmind常用快捷键
  5. HTML5 中Web存储问题
  6. labview 快捷键
  7. win10窗口设置眼睛保护色
  8. NFC卡模拟之模拟卡ID
  9. 2021华为秋招算法工程师面试经历(实习过)
  10. Esp8266对接阿里云物联网远程实时温度监控{探讨帖}
  11. 探讨大数据时代如何规划智慧城市
  12. Excel高级功能 数据工具
  13. 如何删除电脑里的android驱动程序,【教程】安卓手机系统自带程序卸载
  14. Unity小游戏之闯关小游戏
  15. 闪烁?卡顿?CSS硬件加速了解一下(will-change属性详解)
  16. 固定电话+手机号码 正则表达式
  17. 【Bio】基础生物学 - 基本氨基酸 amino acids
  18. JMeter安装及环境配置
  19. 软件项目成本估算中,软件项目外包人月费用一个月是按几天算?
  20. 虚拟化六大安全问题 解决刻不容缓

热门文章

  1. solr4.10和solr5.x ik分词器配置,(Deprecated--2017-04-23)
  2. Iframe高度自适应(兼容IEFirefox、同域跨域)
  3. FCN训练自己的数据集及测试
  4. [深度学习基础] 深度学习基础及数学原理
  5. OpenCV文字绘制函数putText()的使用
  6. 甲骨文中国公司如何如何打赢这场裁员翻身仗?
  7. Rokid发布YodaOS 并宣布代码开源
  8. JDK5.0新特性系列---11.4线程 Condition
  9. 关系数据库NoSQL数据库
  10. WebStorm 10支持TypeScript 1.4到JavaScript的实时编译