mysql笔试题一:查询where having 以及统计函数的使用
来源:互联网 发布:免费刷枪软件下载 编辑:程序博客网 时间:2024/05/19 14:38
题目:
有表如下:
只用一个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
正解:
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之查询、where、常用函数、having
- mysql group by having用法+having where之间的区别+group by按日期分组统计的查询
- mysql group by having用法+having where之间的区别+group by按日期分组统计的查询
- mysql group by内排序的实现以及having和where 条件语句查询的区别
- mysql having 使用 及where和having子句的区别
- 【mysql】查询过滤器ON,WHERE,HAVING
- MySQL查询之ON,WHERE,HAVING
- (12A)select 五种子句:where、group by (结合统计函数使用)、having
- 查询中where和having的区别
- mysql中having和where的区别
- mysql中having和where的区别
- MYSQL中having和where的区别
- Mysql中where与having的区别
- mysql中where和having的区别
- Mysql中 where和having的区别
- mysql中having和where的区别
- mysql中where与having的区别
- Windows Phone 独立存储
- Linux关于网卡的几个命令
- 解析usleep和sleep函数有何区别
- Janki学习和强化记忆的方法
- adb通过TCP/IP来调试Android设备
- mysql笔试题一:查询where having 以及统计函数的使用
- ASM工具集合-amdu
- 九度OJ 题目1066:字符串排序
- 开根号
- 影响Java EE性能的十大问题
- Hive原理与不足
- How Many Fibs? hdu1316 高精度
- Handling network configuration changes
- 中文转UTF