经典SQL(3) 汇总分析

# 二 汇总分析

-- 查询课程编号为“0002”的总成绩
select sum(成绩) from score where 课程号 = '0002';

-- 查询选了课程的学生人数
SELECT COUNT(DISTINCT 学号) as '学生人数' FROM score;

# 分组
-- 查询各科成绩最高和最低的分, 以如下的形式显示:课程号,最高分,最低分
select 课程号,max(成绩) as '最高分', min(成绩) as '最低分' FROM score group by 课程号;

-- 查询每门课程被选修的学生数
select 课程号, count(学号) as '学生数' FROM score group by 课程号;

-- 查询男生、女生人数
select 性别, count(学号) FROM student GROUP BY 性别;

-- 查询平均成绩大于60分学生的学号和平均成绩
select 学号, AVG(成绩) as '平均成绩' from score GROUP BY 学号 HAVING 平均成绩 > 60;

-- 查询至少选修两门课程的学生学号
select 学号, count(课程号) as '课程数' from score GROUP BY 学号 HAVING 课程数 >= 2;

-- 查询同名同姓学生名单并统计同名人数
select 姓名, count(学号) '人数' from student GROUP BY 姓名 HAVING 人数 >= 2;

-- 查询不及格的课程人数并按课程号从大到小排列
select 课程号, count(*) as nums from score where 成绩 < 60 GROUP BY 课程号 ORDER BY nums desc;

-- 查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列
select 课程号, AVG(成绩)  as '平均成绩'  from score GROUP BY 课程号 ORDER BY 平均成绩 asc, 课程号 desc;

-- 检索课程编号为“0004”且分数小于60的学生学号,结果按按分数降序排列
select 学号 from score WHERE 课程号 = '0004' AND 成绩 < 60 ORDER BY 成绩 desc;

-- 统计每门课程的学生选修人数(超过2人的课程才统计)
-- 要求输出课程号和选修人数,查询结果按人数降序排序,若人数相同,按课程号升序排序
select 课程号, count(学号) as stu_nums from score group by 课程号 HAVING stu_nums > 2 order by stu_nums desc, 课程号 asc;

-- 查询两门以上不及格课程的同学的学号及其平均成绩
select 学号, avg(成绩) 平均成绩 from score where 成绩 < 60 GROUP BY 学号 HAVING COUNT(课程号) >= 2;

-- 查询学生的总成绩并进行排名
select 学号, sum(成绩) 总成绩 from score group by 学号 order by 总成绩 desc;

-- 查询平均成绩大于60分的学生的学号和平均成绩
select 学号, avg(成绩) 平均成绩 from score group by 学号 having 平均成绩 > 60;