SQL学习第四篇:汇总分析
1 年前
· 来自专栏
SQL学习记录
1 理解SQL的运行顺序 & 如何看懂报错信息
- 不能在where子句中使用聚合函数
- 额外关注数据中数字的类型是数值型还是字符型
2 汇总函数
-- count函数:求某列的行数【可对任何类型数据进行计算】
-- 注意:若count函数括号内输入的是列名,最终返回值不会将null值计入;若输入的是*,则会计算null值
select count(教师姓名)
from teacher;
-- sum函数:对某列数据求和【只能对数值型的列计算】
select sum(成绩)
from score;
-- avg函数:求某列数据的平均值【只能对数值型的列计算】
select avg(成绩)
from score;
-- max函数:求某列数据的最大值
-- min函数:求某列数据的最小值
select max(成绩), min(成绩)
from score;
-- 在列名前加distinct去重
select count(distinct 姓名)
from student;
-- 练习
-- 查询课程编号为“0002“的总成绩
select sum(成绩)
from score
where 课程号 = '0002';
-- 查询有多少人选了课程
select count(distinct 学号) as '学生人数'
from score;
3 如何对数据进行分组
-- 分别统出生年份小于1990年男女生人数
select 性别, count(*)
from student
where 出生日期 > '1990-01-01'
group by 性别;
-- 练习
-- 查询各科成绩最高分和最低分
select 课程号, max(成绩) as '最高分', min(成绩) as '最低分'
from score
group by 课程号;
-- 查询每门课程被选修的学生人数
select 课程号, count(学号) as '选修人数'
from score
group by 课程号;
--查询男生、女生人数
select 性别, count(*)
from student
group by 性别;
4 对分组结果指定条件
/*
select 查询结果
from 从哪张表中查找数据
where 查询条件
group by 分组
having 对分组结果指定条件;
-- 练习
-- 查询平均成绩大于60分学生的学号和他们的平均成绩
select 学号, avg(成绩) as '平均成绩'
from score
group by 学号
having 平均成绩 > 60;
-- 查询至少选修两门课程的学生学号
select 学号, count(课程号) as 选课数量
from score
group by 学号
having count(课程号) >= 2;
-- 查询同名同姓学生名单并统计同名人数
select 姓名, count(*) as '同名人数'
from student
group by 姓名
having 同名人数 >= 2;
-- 统计平均成绩大于等于80分的课程及相应平均成绩
select 课程号, avg(成绩) as '平均成绩'
from score
group by 课程号
having 平均成绩 >= 80;
5 对查询结果进行排序【注意:order by和limit都在select语句后运行】
-- 指定多个排序列明,asc升序,desc降序,结果顺序按order后字段顺序判定优先级
select *
from score
order by 成绩 asc, 课程号 desc;
-- 空值null的排序,若列中有空值null,则空值null会出现在首位
select *
from teacher
order by 教师姓名;
-- 从查询结果中取出指定行用limit
select *
from score
limit 2;
-- 查询不及格的课程并按课程号从大到小排列
select 课程号, 成绩
from score
where 成绩 < 60
order by 课程号 desc;
-- 查询每门课程的平均成绩,结果按平均成绩升序排序;平均成绩相同时,按课程号降序排列
select 课程号, avg(成绩) as '平均成绩'
from score
group by 课程号
order by 平均成绩 asc, 课程号 desc;
-- 检索课程编号为“04”且分数小于60的学生学号,结果按分数降序排列
select 学号, 课程号, 成绩
from score
where 课程号 = '04' and 成绩 < 60
order by 成绩 desc;
统计每门课程的学生选修人数,超过2人的课程才统计
要求输出课程号和选修人数,查询结果按人数降序排序,若人数相同,按课程号升序排序
select 课程号, count(学号) as '选修人数'
from score
group by 课程号
having 选修人数 > 2
order by 选修人数 desc, 课程号 asc;