汇总分析
函数的3个功能:1、功能;2、输入(参数);3、输出(返回值)
汇总函数:
count:求某列的行数;
sum:对某列数据求和(只能对数值类型的列计算);
avg:求某列数据的平均值(只能对数值类型的列计算);
max:求某列数据的最大值;
min:求某列数据的最小值。
练习1:查询课程表好为“0002”的总成绩;
select sum(成绩)
from score
where 课程号='0002';
练习2:查询选了课程的学生人数;
select count(distinct 学号) as 学生人数
from score;
分组
SQL分组:group by
分析拆解:数据分组-->应用函数-->组合结果
SQL的运行顺序:from-->where-->group by-->select
练习1:查询各科成绩最高和最低分;
select 课程号,max(成绩) as 最高分,min(成绩) as 最低分
from score
group by 课程号;
练习2:查询每门课程被选修的学生数;
SELECT 课程号,count(学号) as 学生人数
FROM score
GROUP BY 课程号;
练习3:查询男生、女生人数;
SELECT 性别,count(学号) as 学生人数
FROM student
GROUP BY 性别;
对分组结果指定条件
对分组结果指定条件:having
只取出男生组时,此处多运行一个指定条件:having count(*)>1;
练习1:查询平均成绩大于60分的学生学号和平均成绩;
SELECT 学号,avg(成绩) as 平均成绩
FROM score
GROUP BY 学号
having AVG (成绩)>60;
练习2:查询至少选修两门课程的学生学号;
SELECT 学号,count(课程号) as 选修数量
FROM score
GROUP BY 学号
having count(课程号)>=2;
练习3:查询同名同姓学生名单并统计同名人数;
SELECT 姓名,count(学号) as 同名人数
FROM student
GROUP BY 姓名
having count(学号)>=2;
用SQL解决业务问题
翻译成大白话-->写出分析思路-->写出对应的SQL子句
练习1:如何计算每门课程的平均成绩,并且平均成绩大于等于80分;
SELECT 课程号,avg(成绩) as 平均成绩
from score
group by 课程号
having avg(成绩)>=80;
对查询结果排序
降序:desc;
升序:asc;
指定多个排序列名;
空值(null)的排序;
从查询结果中取出指定行:limit;
SQL的运行顺序:
1、线运行蓝框里的子句;
2、select子句;
3、最后运行红框里的子句。
练习1:查询不及格的课程并按课程号从大到小排列;
SELECT 课程号
from score
where 成绩<60
order by 课程号 desc;
练习2:查询每门课程的平均成绩,结果按平均成绩升序排列。平均成绩相同时,按课程号降序排列;
SELECT 课程号,avg(成绩) as 平均成绩
from score
group by 课程号
order by 平均成绩 asc,课程号 desc;
如何看懂报错信息
常见错误1:在group by中使用了select里的别名;
常见错误2:在where中使用聚合函数;
常见问题:字符串类型的数字;
总结