最近在面试中遇见一个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)

使用这个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 );

创建表语句

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。

Mysql查询各门课程成绩大于85分的学生名单—纠正网上大部分文章的错误相关推荐

  1. 数据库:一条sql语句查询每门课程都大于80分的学生姓名

    描述:已知student表有姓名-name,分数-grade,课程-course,它们多对多对多,一条sql语句查询每门课程都大于80分的学生姓名? 分析: ①每门课程,涉及到课程数量统计 SELEC ...

  2. select每门可说大于90分_用一条sql语句查询出“每门”课程都大于80分的学生姓名...

    展开全部 首先需要进行分析: 要查询出每门课程都大于80分的学生姓名,因为一个学生有多门课程,所以会出62616964757a686964616fe78988e69d8331333366306534现 ...

  3. 查询出每门课都大于85 分的学生姓名

    用一条SQL 语句 查询出每门课都大于85 分的学生姓名 name   course   score Mary    语文       87 Mary     数学       75 Jeky     ...

  4. mysql查询每门课程成绩最好的前两名学生id和姓名

    创建库:create database db6; 库下面创建表: 班级表: mysql> create table class(cid int not null unique auto_incr ...

  5. 案例:用一条 SQL 语句查询出每门课都大于 80 分的学生姓名

    用一条sql语句查询出每门课都大于80分的学生姓名 首先需要进行分析: 要查询出每门课程都大于80分的学生姓名,因为一个学生有多门课程,所以会出现下面三种情况. 第一可能所有课程都大于80分. 第二可 ...

  6. 用一条SQL 语句 查询出每门课都大于80 分的学生姓名

    1老规矩,首先分析题目理清楚思路再做题,上图: 2.如上图,查询每门课都大于80分的学生姓名,那么第一反应这还不简单: Select Distinct Name From Student Where ...

  7. mysql查询成绩大于89分_查询每门课程成绩都大于80分学生的姓名

    转载的sql语句 .1 查询每门课程成绩都大于80分学生的学号 数据库 表 student name score course A 85  语文 A 75  数学 A 82  英语 B   75  语 ...

  8. 洪君:查出“张”姓学生中平均成绩大于75分的学生信息查询出每门课程的成绩都大于80的学生

    查询出"张"姓学生中平均成绩大于75分的学生信息 表名:student_score  name course score  张青 语文 72  王华 数学 72  张华 英语 81 ...

  9. 有一个班4个学生,5门课程①求第1门课程的平均分;②找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均成绩;③找出平均成绩在90分以上或全部课程成绩在85分以上的学生分别编3个函数实

    有一个班4个学生,5门课程. ①求第1门课程的平均分; ②找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均成绩; ③找出平均成绩在90分以上或全部课程成绩在85分以上的学生. 分别编 ...

最新文章

  1. 让我们来谈谈JDBC
  2. Codeforces Round #527 (Div. 3) 总结 A B C D1 D2 F
  3. 西北大学计算机排行,世界排名领先,西北大学到底有多厉害?
  4. 【Qt教程】1.3 - Qt5 工程文件的功能解读、快捷键
  5. Android:关于声明文件中android:process属性说明
  6. WLAN配置实例(一)——二层组网直接转发
  7. FastAPI 对用户文件的管理(上传、下载、删除)
  8. 【解决】Windows Mobile 6 Professional SDK Refresh.msi 在xp上一直卡死
  9. 腾讯视频弹幕爬取----------之亲爱的,热爱的
  10. Redis集群-哨兵
  11. 字蛛font-spider报错 web font not found
  12. 苹果公司的“多样化”定义:包括加拿大人
  13. 【知识图谱】知识图谱数据库提供一站式全域行业数据融合
  14. 驱动VFD屏幕 / 真空荧光屏 (不完美)
  15. 【重识云原生】第六章容器基础6.4.7.1节——K8S Job组件
  16. 双目立体匹配流程详解
  17. SqlCommand对象-ExecuteNonQuery()方法的使用
  18. 快捷键无法使用、冲突怎么办?一招教你搞定(最新)
  19. Hostapd Configuration Guide
  20. 根据地球上两点坐标,计算实际距离

热门文章

  1. Spring Boot项目介绍(值得学习,超详细)
  2. AIX 上总有一种压缩方式适合你
  3. power oj 2866 青春猪头少年不做怀梦美少女的梦
  4. CSDN文章转PDF
  5. 9个常用的3D建模软件,你还知道哪些?
  6. wildfly 21中应用程序的部署
  7. K均值(kmeans)分类
  8. Google MLOps白皮书:MLOps实践者指南Part I MLOps生命周期及核心能力
  9. cd短是什么意思,王者荣耀:是不是技能cd越短难度就越大?看她就明白了
  10. 哪些数学特征可以用来描述一组数据