记录一下小小的sql:找出每个班级里身高最高的人,并按班级排序
-- 导出 表 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:找出每个班级里身高最高的人,并按班级排序相关推荐
- mysql比较两张表中两个字段值_如何通过SQL找出2个表里值不同的列的方法
以下有两个表,他们的结构完全相同,请通过SQL找出值不同的列. Student_1 NAME AGE SCORE peter 26 100 jack 25 96 daniel 26 48 bark 2 ...
- 典型的Top K算法_找出一个数组里面前K个最大数
原文 典型的Top K算法_找出一个数组里面前K个最大数...或找出1亿个浮点数中最大的10000个...一个文本文件,找出前10个经常出现的词,但这次文件比较长,说是上亿行或十亿行,总之无法一次读入 ...
- python批量删除微信好友_我用 Python 找出了删除我微信的所有人并将他们自动化删除了...
1. 概述 不知你是否遇到过在微信上给通讯录中的某个人发消息,结果出现了这一幕: 平时一直认为自己的心里素质过硬,不过遇到这种情况 ... 在我缓了半个钟头(半分钟)之后,缓缓拿出了手机,打开微信,找 ...
- ACMNO.11 一个数如果恰好等于它的因子之和,这个数就称为“完数“。 例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数“。 编程序找出N之内的所有完数,并按下面格式输出其因子
写在前面,心得感悟~ 代码越来越有难度! 这个ACM题,我调试了 将近50次~ 一个小时! 真的是,年纪轻轻的搞什么ACM呀! 关于题的解决思路放在下面再写吧! 题目描述 一个数如果恰好等于它的因子之 ...
- 找出一个数组里面前K个最大数
前言:今天早上来实验室,同桌问了我一个问题:找出一个数组里面前K个最大数的高效算法.最近正好在看数据结构和算法相关内容,便以己之力帮她思考了思考. 问题:找出一个数组里面前K个最大数. 解法: 1.第 ...
- python批量删除微信好友_Python找出微信上删除你好友的人脚本写法
原标题:Python找出微信上删除你好友的人脚本写法 相信大家在微信上一定被上面的这段话刷过屏,群发消息应该算是微信上流传最广的找到删除好友的方法了.但群发消息不仅仅会把通讯录里面所有的好友骚扰一遍, ...
- 准确找出QQ群里长期潜水的成员踢出去(转)
准确找出QQ群里长期潜水的成员踢出去(转) QQ群解除了以前不能多人同时聊天的限制,多个好友可以在群中即时交流.笔者也建立了一个IT作者编辑群,随着加入人数的增多,慢慢达到了群人数的上限,不能够再加入 ...
- sql找出2000-3000年中的闰年。_跟飞哥学编程:SQL入门-4-查询和条件
为了教学方便,我们先引入一个关键字: SELECT 使用SELECT,可以查询得到表数据,比如: SELECT 其中,星号(*)代表所有列.运行上述SQL语句,返回的就是Student表的所有行所有列 ...
- 自学SQL | 找出每部电影和单部电影销售冠军之间的销售差,列出电影名,销售额差额
小菜鸡的第一篇笔记--自学SQL网 ------------------------------------------------------ 题目: 找出每部电影和单部电影销售冠军之间的销售差,列 ...
- SQL找出顺序列中的断号
先假设info表中有如下数据 select id from info id ----------- 1 2 3 5 6 7 8 10 11 12 15 select beginId,(select ...
最新文章
- contentProvider的使用总结
- Webpack学习-Loader
- 在Laravel中使用Middleware进行身份验证
- Java8新特性之函数式接口
- alter system switch logfile和alter system archive log current的区别
- Mockito和Hamcrest的试驾制造商
- python默认字体大小_python – 如何设置PIL加载的默认字体的大小,使其适合我的8×8矩阵?...
- 就算是蜗牛,也有爬到树顶的那一天!~
- 获得诺贝尔奖之后影响力会下降?绘制精英科学家的职业生涯路线图
- MFC中使用TAB Control控件
- 第1-2讲 初识SLAM
- 如何在C#窗体中定义全局变量
- PHP集成腾讯云短信SDK
- 基于esp32的物联网设计
- 浅析相机相关坐标系的相互转换(世界坐标系、相机坐标系、图像坐标系、像素坐标系、内参矩阵、外参矩阵、扭转因子)【相机标定计算机视觉】
- 小知识 - 恢复chmod执行权限
- laravel——实现Email形式的邮箱验证注册以及登陆功能
- 这8大技术趋势,将塑造未来科技行业格局
- 最大公约数(GCD)算法与最小公倍数(LCM)算法-C++实现
- 史上最简单-在 windows+python3.6 环境下创建自己的YOLOv3 [ VOC2007 ] 数据集