-- 导出  表 test.tbl_middle_class 结构
CREATE TABLE IF NOT EXISTS `tbl_middle_class` (`id` int(11) NOT NULL,`name` varchar(50) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;-- 正在导出表  test.tbl_middle_class 的数据:~3 rows (大约)
DELETE FROM `tbl_middle_class`;
/*!40000 ALTER TABLE `tbl_middle_class` DISABLE KEYS */;
INSERT INTO `tbl_middle_class` (`id`, `name`) VALUES(1, 'Grade1'),(2, 'Grade2'),(3, 'Grade3');
/*!40000 ALTER TABLE `tbl_middle_class` ENABLE KEYS */;-- 导出  表 test.tbl_middle_score 结构
CREATE TABLE IF NOT EXISTS `tbl_middle_score` (`id` int(11) NOT NULL AUTO_INCREMENT,`stu_id` int(11) NOT NULL,`course_name` varchar(50) NOT NULL,`score` int(11) NOT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=latin1;-- 正在导出表  test.tbl_middle_score 的数据:~40 rows (大约)
DELETE FROM `tbl_middle_score`;
/*!40000 ALTER TABLE `tbl_middle_score` DISABLE KEYS */;
INSERT INTO `tbl_middle_score` (`id`, `stu_id`, `course_name`, `score`) VALUES(1, 1, 'Chinese', 80),(2, 1, 'Math', 66),(3, 1, 'English', 91),(4, 1, 'Sport', 88),(5, 2, 'Chinese', 99),(6, 2, 'Math', 100),(7, 2, 'English', 88),(8, 2, 'Sport', 81),(9, 3, 'Chinese', 81),(10, 3, 'Math', 60),(11, 3, 'English', 100),(12, 3, 'Sport', 90),(13, 4, 'Chinese', 77),(14, 4, 'Math', 85),(15, 4, 'English', 96),(16, 4, 'Sport', 66),(17, 5, 'Chinese', 55),(18, 5, 'Math', 85),(19, 5, 'English', 45),(20, 5, 'Sport', 100),(21, 6, 'Chinese', 86),(22, 6, 'Math', 100),(23, 6, 'English', 56),(24, 6, 'Sport', 75),(25, 7, 'Chinese', 100),(26, 7, 'Math', 99),(27, 7, 'English', 85),(28, 7, 'Sport', 78),(29, 8, 'Chinese', 86),(30, 8, 'Math', 100),(31, 8, 'English', 100),(32, 8, 'Sport', 100),(33, 9, 'Chinese', 86),(34, 9, 'Math', 100),(35, 9, 'English', 87),(36, 9, 'Sport', 100),(37, 10, 'Chinese', 79),(38, 10, 'Math', 56),(39, 10, 'English', 85),(40, 10, 'Sport', 99);
/*!40000 ALTER TABLE `tbl_middle_score` ENABLE KEYS */;-- 导出  表 test.tbl_middle_student 结构
CREATE TABLE IF NOT EXISTS `tbl_middle_student` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(50) NOT NULL,`age` int(11) NOT NULL,`grade` varchar(50) NOT NULL,`gender` varchar(50) NOT NULL,`height` int(11) DEFAULT NULL COMMENT '身高',`classid` int(11) DEFAULT NULL COMMENT '班级ID',PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1;-- 正在导出表  test.tbl_middle_student 的数据:~10 rows (大约)
DELETE FROM `tbl_middle_student`;
/*!40000 ALTER TABLE `tbl_middle_student` DISABLE KEYS */;
INSERT INTO `tbl_middle_student` (`id`, `name`, `age`, `grade`, `gender`, `height`, `classid`) VALUES(1, 'jack', 13, '3', 'male', 160, 1),(2, 'kate', 13, '3', 'female', 165, 1),(3, 'candy', 13, '3', 'female', 155, 1),(4, 'tom', 13, '3', 'male', 175, 2),(5, 'bob', 13, '3', 'male', 167, 2),(6, 'jerry', 13, '3', 'male', 166, 2),(7, 'mary', 13, '3', 'female', 167, 3),(8, 'amanda', 13, '3', 'female', 170, 3),(9, 'lee', 13, '3', 'male', 175, 3),(10, 'mike', 13, '3', 'male', 178, 2);
/*!40000 ALTER TABLE `tbl_middle_student` ENABLE KEYS */;/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

以上是sql语句方便测试:注意上面没有database,创建一个,执行上述语句即可

第一种比较麻烦,适合理解

select c.name as classname,d.`name`,d.height from tbl_middle_class c,(
select st.* from tbl_middle_student st,(SELECT classid,MAX(height) as height from tbl_middle_student GROUP BY classid
) b where st.classid = b.classid and st.height = b.height) d where c.id=d.classid ORDER BY classname

其实就是几个sql拼在一起查出来的

思路:找出最高的人,然后从student表中找出这条记录,再与班级联合查询

1.找出最高的人

SELECT classid,MAX(height) as height from tbl_middle_student GROUP BY classid//结果
1   165
2   178
3   175

2.从student表中找出这条记录


select st.* from tbl_middle_student st,(SELECT classid,MAX(height) as height from tbl_middle_student GROUP BY classid
) b where st.classid = b.classid and st.height = b.height//结果
2   kate    13  3   female  165 1
9   lee 13  3   male    175 3
10  mike    13  3   male    178 2

3.与class表进行联合查询也就是结果语句

第二种:两种都思路差不多,第二种简洁一点

select c.name as classname,st.`name`,st.height from
tbl_middle_student st,tbl_middle_class c,(SELECT classid, MAX(height) as height from tbl_middle_student GROUP BY classid) h  WHEREst.classid = c.id and st.height = h.height and st.classid = h.classid ORDER BY classname 

小小记录一下。。。。。

补充:笛卡尔积的应用

//分组以后取第2条
Select * from tbl_middle_student a where 1=(select count(*) from tbl_middle_student where a.classid=classid and a.height <height)//分组以后取前2条
Select * from tbl_middle_student a where 2>(select count(*) from tbl_middle_student where a.classid=classid and a.height <height)

记录一下小小的sql:找出每个班级里身高最高的人,并按班级排序相关推荐

  1. mysql比较两张表中两个字段值_如何通过SQL找出2个表里值不同的列的方法

    以下有两个表,他们的结构完全相同,请通过SQL找出值不同的列. Student_1 NAME AGE SCORE peter 26 100 jack 25 96 daniel 26 48 bark 2 ...

  2. 典型的Top K算法_找出一个数组里面前K个最大数

    原文 典型的Top K算法_找出一个数组里面前K个最大数...或找出1亿个浮点数中最大的10000个...一个文本文件,找出前10个经常出现的词,但这次文件比较长,说是上亿行或十亿行,总之无法一次读入 ...

  3. python批量删除微信好友_我用 Python 找出了删除我微信的所有人并将他们自动化删除了...

    1. 概述 不知你是否遇到过在微信上给通讯录中的某个人发消息,结果出现了这一幕: 平时一直认为自己的心里素质过硬,不过遇到这种情况 ... 在我缓了半个钟头(半分钟)之后,缓缓拿出了手机,打开微信,找 ...

  4. ACMNO.11 一个数如果恰好等于它的因子之和,这个数就称为“完数“。 例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数“。 编程序找出N之内的所有完数,并按下面格式输出其因子

    写在前面,心得感悟~ 代码越来越有难度! 这个ACM题,我调试了 将近50次~ 一个小时! 真的是,年纪轻轻的搞什么ACM呀! 关于题的解决思路放在下面再写吧! 题目描述 一个数如果恰好等于它的因子之 ...

  5. 找出一个数组里面前K个最大数

    前言:今天早上来实验室,同桌问了我一个问题:找出一个数组里面前K个最大数的高效算法.最近正好在看数据结构和算法相关内容,便以己之力帮她思考了思考. 问题:找出一个数组里面前K个最大数. 解法: 1.第 ...

  6. python批量删除微信好友_Python找出微信上删除你好友的人脚本写法

    原标题:Python找出微信上删除你好友的人脚本写法 相信大家在微信上一定被上面的这段话刷过屏,群发消息应该算是微信上流传最广的找到删除好友的方法了.但群发消息不仅仅会把通讯录里面所有的好友骚扰一遍, ...

  7. 准确找出QQ群里长期潜水的成员踢出去(转)

    准确找出QQ群里长期潜水的成员踢出去(转) QQ群解除了以前不能多人同时聊天的限制,多个好友可以在群中即时交流.笔者也建立了一个IT作者编辑群,随着加入人数的增多,慢慢达到了群人数的上限,不能够再加入 ...

  8. sql找出2000-3000年中的闰年。_跟飞哥学编程:SQL入门-4-查询和条件

    为了教学方便,我们先引入一个关键字: SELECT 使用SELECT,可以查询得到表数据,比如: SELECT 其中,星号(*)代表所有列.运行上述SQL语句,返回的就是Student表的所有行所有列 ...

  9. 自学SQL | 找出每部电影和单部电影销售冠军之间的销售差,列出电影名,销售额差额

    小菜鸡的第一篇笔记--自学SQL网 ------------------------------------------------------ 题目: 找出每部电影和单部电影销售冠军之间的销售差,列 ...

  10. SQL找出顺序列中的断号

    先假设info表中有如下数据 select id from info  id ----------- 1 2 3 5 6 7 8 10 11 12 15 select beginId,(select ...

最新文章

  1. contentProvider的使用总结
  2. Webpack学习-Loader
  3. 在Laravel中使用Middleware进行身份验证
  4. Java8新特性之函数式接口
  5. alter system switch logfile和alter system archive log current的区别
  6. Mockito和Hamcrest的试驾制造商
  7. python默认字体大小_python – 如何设置PIL加载的默认字体的大小,使其适合我的8×8矩阵?...
  8. 就算是蜗牛,也有爬到树顶的那一天!~
  9. 获得诺贝尔奖之后影响力会下降?绘制精英科学家的职业生涯路线图
  10. MFC中使用TAB Control控件
  11. 第1-2讲 初识SLAM
  12. 如何在C#窗体中定义全局变量
  13. PHP集成腾讯云短信SDK
  14. 基于esp32的物联网设计
  15. 浅析相机相关坐标系的相互转换(世界坐标系、相机坐标系、图像坐标系、像素坐标系、内参矩阵、外参矩阵、扭转因子)【相机标定计算机视觉】
  16. 小知识 - 恢复chmod执行权限
  17. laravel——实现Email形式的邮箱验证注册以及登陆功能
  18. 这8大技术趋势,将塑造未来科技行业格局
  19. 最大公约数(GCD)算法与最小公倍数(LCM)算法-C++实现
  20. 史上最简单-在 windows+python3.6 环境下创建自己的YOLOv3 [ VOC2007 ] 数据集

热门文章

  1. linux下anjuta_Linux下安装使用C/C++IDE开发工具 anjuta | 学步园
  2. bootice添加黑苹果引导_黑苹果OC(OpenCore)引导升级教程
  3. ESP8266安装安信可一体化开发环境
  4. 【HTML CSS JS 蝴蝶飞舞特效 绝美(附完整代码)】
  5. 常见在线射频电学计算公式
  6. iTunes历史各个版本下载地址
  7. plc几种常用的编程语言特点
  8. Scrum和TFS2010
  9. Keil C51 的printf
  10. win11中利用IIS10搭建asp网站