玖叶教程网

前端编程开发入门

Python 之 MySql 每日一练 04


一、表名和字段

–1. 学生表 student (s_id,s_name,s_birth,s_sex) –学生编号,学生姓名,出生年月,学生性别


–2. 课程表 course (c_id,c_name,t_id) –课程编号,课程名称,教师编号


–3. 教师表 teacher (t_id,t_name) –教师编号,教师姓名


–4. 成绩表 score (s_id,c_id,s_score) –学生编号,课程编号,分数


具体详情看 Python 之 MySql 每日一练 00


二、Mysql 题目

查询平均成绩小于 60 分的同学的学生编号和学生姓名和平均成绩(包括有成绩的和无成绩的)


三、Mysql 分析

1、说到平均成绩,我们想到聚合函数 AVG (col)

>>> 聚合函数扩展

● AVG (col) 返回指定列的平均值

● COUNT (col) 返回指定列中非 NULL 值的个数

● MIN (col) 返回指定列的最小值

● MAX (col) 返回指定列的最大值

● SUM (col) 返回指定列的所有值之和

● GROUP_CONCAT (col) 返回由属于一组的列值连接组合而成的结果

2、由题意可知,需要用到分组,来展示学生编号、姓名和平均成绩

常见的搭配:group by ... having

● 位置

从 sql 语句上而言,where 是写在 group by 前的,而 having 是在 group by 后的

● where 和 having 的区别

where 是分组前再过滤数据

having 是分组后再过滤数据

3、由于要包括有成绩的和无成绩的,需要用 union 合并 group by 的数据

union 会去除重复结果列 ,如果不想去重可以用 union all。


四、Mysql 方案

● sql 语句:

● sql 结果:


>>>Python 之 MySql 每日一练 03

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言