用一条SQL语句查询出每门课都大于80分的学生姓名
name | kecheng | fenshu |
---|---|---|
张三 | 语文 | 81 |
张三 | 数学 | 75 |
李四 | 语文 | 76 |
李四 | 数学 | 90 |
王五 | 语文 | 81 |
王五 | 数学 | 100 |
王五 | 英语 | 90 |
-- 建表语句
CREATE TABLE `mst_stu` (
`name` varchar(255) DEFAULT NULL,
`kecheng` varchar(255) DEFAULT NULL,
`fenshu` int(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 数据
INSERT INTO `mst_stu` VALUES ('张三', '语文', 81);
INSERT INTO `mst_stu` VALUES ('张三', '数学', 75);
INSERT INTO `mst_stu` VALUES ('李四', '语文', 76);
INSERT INTO `mst_stu` VALUES ('李四', '数学', 90);
INSERT INTO `mst_stu` VALUES ('王五', '语文', 81);
INSERT INTO `mst_stu` VALUES ('王五', '数学', 100);
INSERT INTO `mst_stu` VALUES ('王五', '英语', 90);
--分析: 每门课都要大于80分,因此学生的最低分要大于80分,先根据用户分组,看每个人的最低分
select name,min(fenshu) from mst_stu group by name;
+--------+-------------+
| name | min(fenshu) |
+--------+-------------+
| 张三 | 75 |
| 李四 | 76 |
| 王五 | 81 |
+--------+-------------+
-- 在使用 having 筛选出最低分大于80的
select name,min(fenshu) as min_f from mst_stu group by name having min_f > 80;
-- 最终只需要学生姓名
select name from mst_stu group by name having min(fenshu) > 80;
查询后一天 temperature 比前一天高的date
查找与之前(昨天的)日期相比温度更高的所有日期的 Id。
id | date | temperature |
---|---|---|
1 | 2013-04-01 | 20 |
2 | 2013-04-02 | 25 |
3 | 2013-04-03 | 21 |
4 | 2013-04-04 | 24 |
-- mst_Weather
CREATE TABLE `mst_weather` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`date` date DEFAULT NULL,
`temperature` int(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4;
INSERT INTO `mst_weather` VALUES (1, '2013-04-01', 20);
INSERT INTO `mst_weather` VALUES (2, '2013-04-02', 25);
INSERT INTO `mst_weather` VALUES (3, '2013-04-03', 21);
INSERT INTO `mst_weather` VALUES (4, '2013-04-04', 24);
-- 当前表做join,比较日期同时要比较温度
select s1.id,s1.date from mst_Weather s1
join mst_Weather s2
on datediff(s1.date,s2.date) = 1 and s1.temperature > s2.temperature;
查询每个主播的最大level以及对应的最小gap(注意:不是每个主播的最大level和最小gap)
zhuobo_id | level | gap |
---|---|---|
123 | 8 | 20 |
123 | 9 | 40 |
123 | 9 | 30 |
246 | 6 | 30 |
246 | 6 | 20 |
CREATE TABLE `mst_zhubo` (
`zhubo_id` int(11) NOT NULL,
`level` int(255) DEFAULT NULL,
`gap` int(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `mst_zhubo` VALUES (123, 8, 20);
INSERT INTO `mst_zhubo` VALUES (123, 9, 40);
INSERT INTO `mst_zhubo` VALUES (123, 9, 30);
INSERT INTO `mst_zhubo` VALUES (246, 6, 30);
INSERT INTO `mst_zhubo` VALUES (246, 6, 20);
--先查询出每个主播最大的level
select zhubo_id,max(level) from mst_zhubo GROUP BY zhubo_id;
-- 再查询出每个主播所有符合最大level的数据
select * from mst_zhubo where (zhubo_id,level) in (select zhubo_id,max(level) from mst_zhubo GROUP