题目:

有表如下:

只用一个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 以及统计函数的使用相关推荐

  1. Mysql笔试题之单列拆分多列查询并合并显示

    Mysql笔试题之单列拆分多列查询并合并显示 事情是这样的:某天在开发群里看同行们在聊天,有一位同行发了一个mysql笔试题.抱着试一试的心态研究了几个小时.话不多说直接上题. 题目 有学生表,结构和 ...

  2. php如何对 mysql 中text类型拆分存入一个数组_PHP、Mysql笔试题

    PHP&MySQL 笔试题 一.选择题 1. php代表什么意思?() A.Hypertext Preprocessor(超文本预处理器) B.Hyperlink Preprocessor(超 ...

  3. mysql笔试题15道

    (93条消息) mysql笔试题18道_bubbleJessica的博客-CSDN博客 19.列出最低薪资大于1500的各种工作及从事此工作的全部雇员人数 SELECT JOB,COUNT(*) FR ...

  4. mysql+小写字母不对_PHP、Mysql笔试题

    PHP&MySQL 笔试题 一.选择题 1. php代表什么意思?() A.Hypertext Preprocessor(超文本预处理器) B.Hyperlink Preprocessor(超 ...

  5. MySQL笔试题练习及答案(一)

    第一题 题目描述 查找最晚入职员工的所有信息,为了减轻入门难度,目前所有的数据里员工入职的日期都不是同一天(sqlite里面的注释为–,mysql为comment) CREATE TABLE empl ...

  6. mysql 笔试题_MySQL笔试题详解(一)(中等难度)

    有一位学生在找数据分析工作的时候,遇到一个笔试题,内容如下: 现有注册用户表table_user,有两个字段:user_id(用户id).reg_tm(注册时间).有订单表table_order,有三 ...

  7. MySQL笔试题整理(二)

    一.学生表.班级表 1.学生表:学生编号ID.班级编号c_ID.姓名sname.性别sex.分数score 2.班级表:班级编号cID.班级cname --建表 create table Studen ...

  8. php mysql笔试题_初级PHP程序员笔试题

    初级PHP程序员笔试题 答题时间:60 – 90分钟 一.基础及程序题(建议使用你擅长的语言:C/C++.PHP.Java) 1.写一个排序算法,可以是冒泡排序或者是快速排序,假设待排序对象是一个维数 ...

  9. java与mysql笔试题_JAVA和数据库笔试题

    java部分: 选择:1.下面的执行结果: Java代码 public class Test3 { public static void main(String args[]){ int a=222; ...

最新文章

  1. kafka在zookeeper下的目录结构
  2. SSDT – Error SQL70001 This statement is not recognized in this context-摘自网络
  3. 初识Anrdiod SDK
  4. python自学笔记_python学习笔记(4)
  5. 实践教程 | Pytorch 模型的保存与迁移
  6. Python Cartopy地图投影【2】
  7. mapinfo将北京54坐标系转WGS84坐标系
  8. 云南大学计算机在职硕士,在职硕士
  9. 7个用于开源网络情报渗透测试工作的热门OSINT工具
  10. python虚拟串口_python 虚拟串口通信
  11. html批量转码工具,文件转码工具(文件GBK与UTF编码批量转码工具)
  12. Vue 3 Component emitted event “confirmForm“ but it is neither declared in the emit
  13. 深度整形外科:使用手绘草图进行鲁棒且可控的图像编辑
  14. 关于拉流端ts时间切片问题导致的直播黑屏问题
  15. win10如何修改mac地址(亲测通过)
  16. 启科量子可视化量子编程——QuComposer
  17. MYSQL 中连接的使用
  18. 7.STM32C8T6+DHT11在OLED上显示 温度,湿度
  19. 网站文章采集、撰写、推广注意要点
  20. 海外服务器被攻击怎么办?IP被封要如何处理?

热门文章

  1. 双11中奖名单公布啦
  2. 连接策略与搜索引擎优化
  3. IoU优化——在Anchor-Free中提升目标检测精度(附源码)
  4. 成成你好呀(C知识点整理二)
  5. 如何注册ArcGIS教学试用版账号
  6. MCtalk创业声音丨博学明辨:兴趣社交,给退休前后老年朋友的「小而美」空间
  7. Ubuntu云安装桌面版
  8. 使用Java统计英文文章的单词频率。
  9. linux 系统命令被后门修改_一次Linux系统被攻击的分析过程
  10. srs 直播连麦环境搭建