mysql笔试题一:查询where having 以及统计函数的使用
题目:
有表如下:
只用一个select语句查询:不及格科目大于或等于2科的学生,的平均分(所有科目的平均分)。
mysql> select * from student;
+------+---------+--------+
| name | subject | score |
+------+---------+--------+
| 张三 | 数学 | 80 |
| 张三 | 语文 | 53 |
| 张三 | 英语 | 59 |
| 李四 | 数学 | 55 |
| 李四 | 语文 | 56 |
| 李四 | 英语 | 50 |
| 王五 | 数学 | 100 |
| 王五 | 语文 | 90 |
+------+---------+--------+
8 rows in set
要点:
1、要统计每个学生不及格科目的个数。
2、计算平均分。
误解一:使用count统计。count永远是统计的所有行!
正解:用sum统计。先计算所有人的平均分,再筛选。
mysql> select name,avg(score),sum(score < 60) as cnt from student group by name having cnt >= 2;
+------+------------+-----+
| name | avg(score) | cnt |
+------+------------+-----+
| 张三 | 64.0000 | 2 |
| 李四 | 53.6667 | 3 |
+------+------------+-----+
2 rows in set
sum(score < 60) 就是统计 挂科数目。
having 是用于筛选的,这里不用用where。where只能用于存在的列。
当然也可以用 子查询 左链接, 这样反到麻烦了。
题目2:还是上面的表。
查询每个学生的最大分数的科目及分数。
误解1:
mysql> select *,max(score) from student group by name;
+------+---------+-------+------------+
| name | subject | score | max(score) |
+------+---------+-------+------------+
| 张三 | 数学 | 80 | 80 |
| 李四 | 数学 | 55 | 56 |
| 王五 | 数学 | 100 | 100 |
+------+---------+-------+------------+
3 rows in set
虽然查出了最大分数,但显示的科目是错误的。因为group by总是取第一条记录。
正解:
1、where 子查询 (先找到每个学生的最大分数, 在根据分数刷新出记录)。
mysql> select * from student where score in(select max(score) from student group by name);
+------+---------+-------+
| name | subject | score |
+------+---------+-------+
| 张三 | 数学 | 80 |
| 李四 | 语文 | 56 |
| 王五 | 数学 | 100 |
+------+---------+-------+
3 rows in set
2、from子查询 (先排序,在group by 拿到第一个,即最大分数的那条记录)
mysql> select * from (select * from student order by score desc) as tmp group by name;
+------+---------+-------+
| name | subject | score |
+------+---------+-------+
| 张三 | 数学 | 80 |
| 李四 | 语文 | 56 |
| 王五 | 数学 | 100 |
+------+---------+-------+
3 rows in set
整两种方法是有很大区别的,第二种只能取出一条记录,如果最大分数相同的话。
mysql笔试题一:查询where having 以及统计函数的使用相关推荐
- Mysql笔试题之单列拆分多列查询并合并显示
Mysql笔试题之单列拆分多列查询并合并显示 事情是这样的:某天在开发群里看同行们在聊天,有一位同行发了一个mysql笔试题.抱着试一试的心态研究了几个小时.话不多说直接上题. 题目 有学生表,结构和 ...
- php如何对 mysql 中text类型拆分存入一个数组_PHP、Mysql笔试题
PHP&MySQL 笔试题 一.选择题 1. php代表什么意思?() A.Hypertext Preprocessor(超文本预处理器) B.Hyperlink Preprocessor(超 ...
- mysql笔试题15道
(93条消息) mysql笔试题18道_bubbleJessica的博客-CSDN博客 19.列出最低薪资大于1500的各种工作及从事此工作的全部雇员人数 SELECT JOB,COUNT(*) FR ...
- mysql+小写字母不对_PHP、Mysql笔试题
PHP&MySQL 笔试题 一.选择题 1. php代表什么意思?() A.Hypertext Preprocessor(超文本预处理器) B.Hyperlink Preprocessor(超 ...
- MySQL笔试题练习及答案(一)
第一题 题目描述 查找最晚入职员工的所有信息,为了减轻入门难度,目前所有的数据里员工入职的日期都不是同一天(sqlite里面的注释为–,mysql为comment) CREATE TABLE empl ...
- mysql 笔试题_MySQL笔试题详解(一)(中等难度)
有一位学生在找数据分析工作的时候,遇到一个笔试题,内容如下: 现有注册用户表table_user,有两个字段:user_id(用户id).reg_tm(注册时间).有订单表table_order,有三 ...
- MySQL笔试题整理(二)
一.学生表.班级表 1.学生表:学生编号ID.班级编号c_ID.姓名sname.性别sex.分数score 2.班级表:班级编号cID.班级cname --建表 create table Studen ...
- php mysql笔试题_初级PHP程序员笔试题
初级PHP程序员笔试题 答题时间:60 – 90分钟 一.基础及程序题(建议使用你擅长的语言:C/C++.PHP.Java) 1.写一个排序算法,可以是冒泡排序或者是快速排序,假设待排序对象是一个维数 ...
- java与mysql笔试题_JAVA和数据库笔试题
java部分: 选择:1.下面的执行结果: Java代码 public class Test3 { public static void main(String args[]){ int a=222; ...
最新文章
- kafka在zookeeper下的目录结构
- SSDT – Error SQL70001 This statement is not recognized in this context-摘自网络
- 初识Anrdiod SDK
- python自学笔记_python学习笔记(4)
- 实践教程 | Pytorch 模型的保存与迁移
- Python Cartopy地图投影【2】
- mapinfo将北京54坐标系转WGS84坐标系
- 云南大学计算机在职硕士,在职硕士
- 7个用于开源网络情报渗透测试工作的热门OSINT工具
- python虚拟串口_python 虚拟串口通信
- html批量转码工具,文件转码工具(文件GBK与UTF编码批量转码工具)
- Vue 3 Component emitted event “confirmForm“ but it is neither declared in the emit
- 深度整形外科:使用手绘草图进行鲁棒且可控的图像编辑
- 关于拉流端ts时间切片问题导致的直播黑屏问题
- win10如何修改mac地址(亲测通过)
- 启科量子可视化量子编程——QuComposer
- MYSQL 中连接的使用
- 7.STM32C8T6+DHT11在OLED上显示 温度,湿度
- 网站文章采集、撰写、推广注意要点
- 海外服务器被攻击怎么办?IP被封要如何处理?