汇总分析
原先建立的数据集情况:
student(学号,姓名,出生日期,性别)
score(学号,课程号,成绩)
course(课程号,课程名称,教师号)
teacher(教师号,教师姓名)
- 函数:输入、功能、输出
1.count,求某列的行数,
select
(注意,Null不计入)
select count(*) from teacher;
2.sum,某列数据求和
select sum(成绩) from score;
3.avg,求某列数据的平均值
select avg(成绩) from score;
4.max,求某列数据的最大值
5.min,求某列数据的最小值
select max(成绩),min(成绩) from score;
6.加入distinct可删除重复值,再计算。
select count(distinct 姓名) from student;
练习:查询课程编号为“0002”的总成绩
select sum(成绩) from score where 课程号='0002';
练习:查询选了课程的学生人数
select count(distinct 学号) from score;
运行结果展示:
- 分组
1.分析方法:数据分组→应用函数→组合结果
select 性别,count(*) from student group by 性别;
2.SQL运行顺序:from(来源)where(条件)group by(分组)select(应用函数、组合结果和筛选指定列)
select 性别,count(*) from student where 出生日期>'1990-01-01' group by 性别;
练习:查询各学科成绩最高和最低的分
select 课程号,max(成绩),min(成绩) from score group by 课程号;
练习:查询每门课程被选修的学生数
select 课程号,count(distinct 学号) from score group by 课程号;
练习:查询男生、女生数
select 性别,count(*) from student group by 性别;
运行结果展示:
- 对分组结果指定条件
1.where字句只能筛选行的条件,而having字句可以指定分组后的条件
select 性别,count(*) from student group by 性别 having count(*)>1;
2.SQL运行顺序:from(来源)where(条件)group by(分组)having(对分组结果指定条件)select(应用函数、组合结果和筛选指定列)
练习:查询平均成绩大于60分的学生学号和平均成绩
select 学号,avg(成绩)as 平均成绩 from score group by 学号 having avg(成绩)>60;
练习:查询至少选修两门课程的学生学号
select 学号 from score group by 学号 having count(课程号)>=2;
练习:查询同名同姓学生名单并统计同名人数
select 姓名,count(*)as 同名人数 from student group by 姓名 having count(*)>1;
运行结果展示:
- 用SQL解决业务问题
1.翻译成大白话→写出分析思路→写出相应的sql字句
2.计算各科的平均成绩,分组课程,计算平均成绩
select 查询结果:课程号(分组)、平均成绩avg