一道很好的mysql面试练习题,having综合应用
写一条SQL语句,求出2门以及2门以上不及格的科目平均分
>要出现2门以及2门以上的学科不及格
>计算该考生所有学科的平均分,不单是,不及格的那几门
#创建表:
create table `ecs_mian2` (
`user_name` varchar (20),
`subject` varchar (20),
`score` int (4)
);
insert into `ecs_mian2` (`user_name`, `subject`, `score`) values('张三','数学','');
insert into `ecs_mian2` (`user_name`, `subject`, `score`) values('张三','语文','');
insert into `ecs_mian2` (`user_name`, `subject`, `score`) values('张三','地理','');
insert into `ecs_mian2` (`user_name`, `subject`, `score`) values('李四','语文','');
insert into `ecs_mian2` (`user_name`, `subject`, `score`) values('李四','政治','');
insert into `ecs_mian2` (`user_name`, `subject`, `score`) values('王五','政治','');
insert into `ecs_mian2` (`user_name`, `subject`, `score`) values('赵六','物理','');
insert into `ecs_mian2` (`user_name`, `subject`, `score`) values('赵六','化学','');
insert into `ecs_mian2` (`user_name`, `subject`, `score`) values('赵六','语文','');
insert into `ecs_mian2` (`user_name`, `subject`, `score`) values('赵六','数学','');

思路一:
求出score < 60的科目数,然后统计平均分
#这种方法:用where过滤了score < 60的科目,就算不到score >= 60的科目的平均分
SELECT user_name, AVG(score ) AS avg_score,
COUNT( * ) AS num FROM ecs_mian2 WHERE score < 60 GROUP BY user_name HAVING num >= 2

这个结果是错误的,原因在于: " 用where过滤了score < 60的科目,就算不到score >= 60的科目的平均分 "
思路二:
#查出所有人的平均分
SELECT user_name,AVG( score ) FROM ecs_mian2 GROUP BY user_name;
#查出所有人不及格的课程(不及格标记为1,及格标记为0 )
SELECT user_name,score, score < 60 FROM ecs_mian2;
#不及格在2门以上的人
SELECT user_name,SUM( score < 60 ) AS bujige FROM ecs_mian2 GROUP BY user_name HAVING bujige >= 2
#综合以上3条语句的结果,可以得出,不及格科目>=2的人的所有学科平均分
SELECT user_name,AVG( score ) AS pjf, SUM( score < 60 ) AS bujige FROM ecs_mian2 GROUP BY user_name HAVING bujige >= 2
该思路不同于where,没有过滤任何一门学科的分数,所以能够统计到平均分

小结:
1,mysql语句也需要灵活的思路
2,表中的字段,可以认为是变量,变量当然可以计算,比较,调用函数等
一道很好的mysql面试练习题,having综合应用的更多相关文章
- 最近面试java后端开发的感受:如果就以平时项目经验来面试,通过估计很难——再论面试前的准备
在上周,我密集面试了若干位Java后端的候选人,工作经验在3到5年间.我的标准其实不复杂:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架,我相信其它公司招初级开发时,应该也照着这个标准来面 ...
- mysql面试题目
昨天晚上无意中翻译到baidu的 dba(mysql,redis) 面试题,阅读了一下,发现没有一个自己能完美解释的.这确实是温床导致的思维懒惰. 具体几个问题如下: 1:MySQL InnoDB存储 ...
- java架构之路-(面试篇)Mysql面试大全
说一下mysql比较宏观的面试,具体咋写sql的这里就不过多举例了.后面我还会给出一个关于mysql面试优化的试题,这里主要说的索引和B+Tree结构,很少提到我们的集群配置优化方案. 1.索引是什么 ...
- MySQL面试总结
MySQL面试总结 # MySQL的存储引擎 `MyISAM`(默认表类型):非事务的存储引擎,基于传统的`ISAM`(有索引的顺序访问方法)类型,是存储记录和文件的标准方法,不是事务安全,不支持外键 ...
- MySQL面试 - 读写分离
MySQL面试 - 读写分离 面试题 你们有没有做 MySQL 读写分离?如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥?如何解决 MySQL 主从同步的延时问题? 面试官心理分析 ...
- [转帖]MySQL的又一神器-锁,MySQL面试必备
MySQL的又一神器-锁,MySQL面试必备 https://segmentfault.com/a/1190000020762791 lock 低一级的是 latch 原文链接:blog.ouya ...
- 《MySQL面试小抄》查询缓存机制终面
<MySQL面试小抄>查询缓存机制终面 我是肥哥,一名不专业的面试官! 我是囧囧,一名积极找工作的小菜鸟! 囧囧表示:小白面试最怕的就是面试官问的知识点太笼统,自己无法快速定位到关键问题点 ...
- 《MySQL面试小抄》索引考点一面总结
<MySQL面试小抄>索引考点一面总结 我是肥哥,一名不专业的面试官! 我是囧囧,一名积极找工作的小菜鸟 囧囧表示:面试最怕的就是面试官问的知识点太笼统,自己无法快速定位到关键问题点!!! ...
- 《MySQL面试小抄》索引考点二面总结
<MySQL面试小抄>索引考点二面总结 我是肥哥,一名不专业的面试官! 我是囧囧,一名积极找工作的小菜鸟! 囧囧表示:小白面试最怕的就是面试官问的知识点太笼统,自己无法快速定位到关键问题点 ...
随机推荐
- Python黑客——快速编写信息收集器
i春秋作家:大木瓜 环境:Python 3模块:LxmlRequestBeautifulsoup开始:首先看一下目标站: http://gaokao.chsi.com.cn/gkxx/zszcgd/d ...
- virtualbox硬盘扩容
https://blog.csdn.net/ouyang_peng/article/details/53261599 1. cmd界面进入virtualbox安装目录:cd C:\Program Fi ...
- oracle安装完成之后,执行sqlplus命令,提示:bash: sqlplus: command not found...
1.安装完oracle后,用终端登录,因为不是直接用oracle用户登录的,所以我就执行$ su oracle切换成oracle用户之后,执行"echo $ORACLE_HOME" ...
- 矩阵乘法在numpy/matlab/数学上的不同
数学意义上的矩阵乘法 注意事项: 1.当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘. 2.矩阵C的行数等于矩阵A的行数,C的列数等于B的列数. 3.乘积C的第m行第n列的 ...
- tkinter如何设置界面消失 当制作一个登陆界面时,登陆成功之后,如何让登陆界面本身消失
tkinter如何设置界面消失 当制作一个登陆界面时,登陆成功之后,如何让登陆界面本身消失 if querySQL.checkAll():#用户名和密码都输入正确 self.root.withdraw ...
- Android使用内容提供者实现增删改查操作
Android使用内容提供者实现增删改查操作 这里需要建立两个项目:SiYouShuJuKu(使用内容提供者暴露相关的操作),DQDYGApplication(使用内容解析者对第一个应用进行相关的解析 ...
- Android中Serializable和Parcelable序列化对象详解
学习内容: 1.序列化的目的 2.Android中序列化的两种方式 3.Parcelable与Serializable的性能比较 4.Android中如何使用Parcelable进行序列化操作 5.P ...
- koa2 get请求后台正常接收参数 前端报404错误
刚学习一门技术时,总会踩一些坑. 前端代码 function del(mId){ $.ajax({ type:"get", url:"/delUser", da ...
- 高可用Hadoop平台-启航
1.概述 在上篇博客中,我们搭建了<配置高可用Hadoop平台>,接下来我们就可以驾着Hadoop这艘巨轮在大数据的海洋中遨游了.工欲善其事,必先利其器.是的,没错:我们开发需要有开发工具 ...
- Redis安装以及主从实现
Redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串). list(链表).set(集合)和zset(有序 ...