SQL : 查找偏科的学生

2020-12-02  本文已影响0人  Youzhicha

表的结构

create table student_test_info(
id bigint primary key auto_increment,
student_id bigint,
student_name varchar(10),
course_id bigint,
course_name varchar(10),
score bigint
);

insert into student_test_info values
(1,20101,'张x',101,'商务统计',73),
(2,20101,'张X',104,'时间序列分析',67),
(3,20101,'张x',105,'随机过程',52),
(4,20102,'李l',104,'时间序列分析',61),
(5,20102,'李l',102,'应用回归分析',63),
(6,20103,'孙c',101,'商务统计',87),
(7,20103,'孙c',107,'计量经济学',82);

目标:

搜索偏科的学生 (课程有小于某课程平均分的学生)

解决办法:

首先,计算各个课程的平均分,连接到原本的数据表上。

其次, 搜索:课程有小于某课程平均分的学生:

将各科分数-各课程的平均分的,差值,
按学生分组,
删选出差值小于0的学生ID。

最后, SQL语句:

select  c.student_id from 
select  a.*, b.avgS,  a.score - b.avgS as diff from 
student_test_info a  inner join 
(select   course_id, avg(score)  avgS  from student_test_info group by course_id  ) b on b.course_id = a. course_id  
c 
group by c.student_id having min(c.diff) < 0  



分析总结

1.聚合函数: 可以用来统计、求和、求最值等,分类:
–COUNT:统计行数量
–SUM:获取单个列的合计值
–AVG:计算某个列的平均值
–MAX:计算列的最大值
–MIN:计算列的最小值

2.GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。

  1. join : 把两个或多个表的行结合起来,基于这些表之间的共同字段。

4.ON 和 WHERE 过滤条件的区别如下:
ON : 条件是在生成临时表时使用的条件,只有用join 的时候bai 才用。
WHERE : 条件是在临时表已经生成后,对临时表进行的过滤条件。

  1. HAVING :因为WHERE 关键字无法与聚合函数一起使用。
上一篇 下一篇

猜你喜欢

热点阅读