Mysql查询各门课程成绩⼤于85分的学⽣名单—纠正⽹上⼤部
分⽂章的错误
最近在⾯试中遇见⼀个Mysql⾯试题内容如下:
mapper注解的主要作用⼀张score表 中有如图所⽰数据,写出查询 所有成绩都⼤于85分的学⽣姓名的sql。
第⼀反应 所有成绩 根据name group by。
然后在min(chengji)>85.
写出的sql如下
霹雳战冥曲在线观看SELECT * from chengji1 GROUP BY `name`  HAVING MIN(chengji)>=85;
SELECT * from chengji1  GROUP BY `name` HAVING MIN(chengji)>=85 ORDER BY chengji;
当然orderby 加不加⼀样。
⾃认为没问题。出于好奇回家⾃⼰创建了这个表插⼊了这些数据,想要验证⼀下结果。结果出乎意料的杯具了。
王五是被查询出来了。很奇怪啊。于是上⽹查查正确的sql如何写。结果发现80%以上的⽂章写得sql与我写得⼀样。只是他们的成绩是⼤于80,王五符合条件,所以没有暴漏出问题。
于是我增加数据进⾏再次尝试。
qq小程序开发教程
查询结果如下图
依旧是不正确的。⽹上查不到没办法了,⾃⼰研究把。
先⽤最原始的⼦查询把。sql如下:
SELECT DISTINCT a.name
FROM score a
WHERE a.name NOT IN(SELECT DISTINCT b.name FROM score b WHERE b.chengji < 85);
思路是查询出所有不符合条件的姓名,然后where 姓名不包含在⼦查询结果中的,如果⼀⼈有两门成绩⼤于85,这样可能会出现重复名字,加个DISTINCT去重⼀下。
在线考试系统源码javaweb免费
这样是肯定没问题的。
mysql面试题sql
然后进⼀步的去调整。
select name from score
group by name
having name not in (
select name from score
where chengji <85)
使⽤这个sql就不⽤使⽤DISTINCT关键字了。让group by来执⾏。
也没有问题。但是都是通过⼦查询,有没有更优的⽅法呢。想了⼀下原因是不是因为有的学⽣是两门成绩,但是有的学⽣是三门。于是我想到了⼀个⽅法,通过数量上进⾏判断每个⼈有⼏门成绩与他成绩⼤于85的次数进⾏⽐较。sql如下:
select name from score
group by name
having count(chengji) =sum(case  when chengji>85 then 1 else 0 end );
html下拉框标签
创建表语句
CREATE TABLE `score` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(10) DEFAULT NULL,
`kecheng` varchar(10) DEFAULT NULL,
`chengji` varchar(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;
插⼊数据的语句
INSERT INTO score(id,`name`,kecheng,chengji) VALUES(1,'张三','语⽂',81);
INSERT INTO score(id,name,kecheng,chengji) VALUES(2,'张三','数学',75);
INSERT INTO score(id,name,kecheng,chengji) VALUES(3,'李四','语⽂',76);
INSERT INTO score(id,name,kecheng,chengji) VALUES(4,'李四','数学',90);
INSERT INTO score(id,name,kecheng,chengji) VALUES(5,'王五','语⽂',81);
INSERT INTO score(id,name,kecheng,chengji) VALUES(6,'王五','数学',100);
INSERT INTO score(id,name,kecheng,chengji) VALUES(7,'王五','英语',90);
INSERT INTO score(id,name,kecheng,chengji) VALUES(8,'赵六','语⽂',89);
INSERT INTO score(id,name,kecheng,chengji) VALUES(9,'赵六','数学',100);
INSERT INTO score(id,name,kecheng,chengji) VALUES(10,'赵六','英语',90);
INSERT INTO score(id,name,kecheng,chengji) VALUES(11,'吴七','语⽂',81);
INSERT INTO score(id,name,kecheng,chengji) VALUES(12,'吴七','数学',79);
INSERT INTO score(id,name,kecheng,chengji) VALUES(13,'吴七','英语',67);
哈哈成功了。这是我想到的最好的查询⽅式了。⼩伙伴们你们还有什么想法欢迎积极参与讨论。共同来到⼀个最好的sql。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。