Mysql查询各门课程成绩大于85分的学生名单 |
您所在的位置:网站首页 › MySQL查询总数大于5的信息 › Mysql查询各门课程成绩大于85分的学生名单 |
最近在面试中遇见一个Mysql面试题内容如下: 一张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,王五符合条件,所以没有暴漏出问题。 于是我增加数据进行再次尝试。 查询结果如下图 依旧是不正确的。网上查不到没办法了,自己研究把。 先用最原始的子查询把。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去重一下。 这样是肯定没问题的。 然后进一步的去调整。 select name from score group by name having name not in ( select name from score where chengji 85 then 1 else 0 end );创建表语句 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。
|
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |