1、在学生选课表中,统计学生平均分大于70的成绩记录。包括学生学号、总分、平均分、课程门数、课程最高分、最低分字段。 2、在学生选课表和学生表中,统计学生平均分在60~70和90~100的学生成绩记录,包括学生学号、学生姓名、总分、平均分、最高分、最低分、所修课程门数字段。 3、在学生选课表和学生表中,查询性别为女并且平均分大于80的学生基本信息。 4、统计平均分各分数段人数。 5.在学生选课表、学生表中,查询学生成绩重修(成绩<60)门数大于10门的学生基本信息(查询结果包括学号、姓名、性别字段)。 ### 实验4 SQL数据统计处理知识点详解 #### 1. 统计学生平均分大于70的成绩记录 在本实验的第一部分中,我们关注的是如何筛选出那些平均分超过70分的学生及其相关信息。这里使用到了`GROUP BY`、`SUM`、`AVG`、`COUNT`、`MAX`和`MIN`等聚合函数来计算每个学生的总分、平均分、选课数量以及分数的最大最小值,并通过`HAVING`子句来限定只返回那些平均分大于70的学生信息。 **知识点解析**: - **`GROUP BY`**: 用于对数据进行分组,便于后续的聚合操作。在这个例子中,我们需要按照学生学号进行分组,以便计算每位学生的各项指标。 - **`SUM`**: 计算总和,这里用来计算每位学生的总分。 - **`AVG`**: 计算平均值,用于计算每位学生的平均成绩。 - **`COUNT`**: 计数器,计算每组内的行数,在这里用以得出每位学生选课的数量。 - **`MAX`和`MIN`**: 分别计算最大值和最小值,这里用来找出每位学生的最高分和最低分。 - **`HAVING`**: 类似于`WHERE`子句,但应用于`GROUP BY`之后的结果集上,用来过滤掉不满足条件的分组。在这里,它确保了只返回平均分大于70分的学生。 **示例代码**: ```sql SELECT Sno as 学号, SUM(grade) AS 总分, AVG(grade) AS 平均分, COUNT(Cno) AS 课程门数, MAX(grade) AS 最高分, MIN(grade) AS 最低分 FROM SC GROUP BY Sno HAVING AVG(grade) > 70; ``` --- #### 2. 统计学生平均分在60~70和90~100的学生成绩记录 这部分实验要求统计那些平均分位于60到70之间或者90到100之间的学生的信息。同样地,我们利用`GROUP BY`、`SUM`、`AVG`等聚合函数,并结合`HAVING`子句来完成这一任务。此外,还需要从两个表(学生表和选课表)中获取信息,因此还涉及到表之间的连接操作。 **知识点解析**: - **表连接**: - **隐式连接**: 使用逗号`,`来连接表,这种写法要求在`WHERE`子句中明确指定连接条件。例如: ```sql SELECT ... FROM SC, Student WHERE SC.Sno = Student.Sno; ``` - **显式连接**: 使用`JOIN`关键字来连接表,这种方式更易于阅读和维护。例如: ```sql SELECT ... FROM SC JOIN Student ON SC.Sno = Student.Sno; ``` **示例代码**: ```sql SELECT Student.Sno as 学号, Sname As 姓名, SUM(grade) AS 总分, AVG(grade) AS 平均分, MAX(grade) AS 最高分, MIN(grade) AS 最低分, COUNT(Cno) AS 所修课程门数 FROM SC JOIN Student ON SC.sno = Student.sno GROUP BY Student.Sno, Student.Sname HAVING (AVG(grade) >= 60 AND AVG(grade) <= 70) OR (AVG(grade) >= 90 AND AVG(grade) <= 100); ``` --- #### 3. 查询性别为女并且平均分大于80的学生基本信息 这一部分的目标是筛选出那些性别为女性且平均分高于80分的学生的基本信息。与前两部分类似,这里仍然需要使用到`GROUP BY`和`HAVING`子句,同时还要加上一个额外的条件来筛选性别。 **知识点解析**: - **多条件筛选**: - 使用逻辑运算符`AND`和`OR`来组合多个条件。 - 在`HAVING`子句中可以同时应用多个条件。 **示例代码**: ```sql SELECT Student.Sno, Student.Sname, Student.Ssex, Student.Sage, Student.Sdept FROM Student JOIN SC ON Student.Sno = SC.Sno GROUP BY Student.Sno, Student.Sname, Student.Ssex, Student.Sage, Student.Sdept HAVING Student.Ssex = '女' AND AVG(SC.grade) > 80; ``` --- #### 4. 统计平均分各分数段人数 这部分的任务是将学生的平均分划分为不同的分数段,并统计每个分数段的人数。这里需要用到嵌套查询和`UNION ALL`来组合不同分数段的结果。 **知识点解析**: - **嵌套查询**: - 外层查询负责统计每个分数段的人数。 - 内层查询则用来过滤出符合特定分数范围的学生。 **示例代码**: ```sql -- 60分以下的人数 SELECT '60以下' AS 分数段, COUNT(*) AS 人数 FROM ( SELECT Student.Sno, AVG(grade) AS avg_score FROM Student JOIN SC ON Student.Sno = SC.Sno GROUP BY Student.Sno HAVING AVG(grade) < 60 ) AS SubQuery60 UNION ALL -- 60-80的人数 SELECT '60-80' AS 分数段, COUNT(*) AS 人数 FROM ( SELECT Student.Sno, AVG(grade) AS avg_score FROM Student JOIN SC ON Student.Sno = SC.Sno GROUP BY Student.Sno HAVING AVG(grade) BETWEEN 60 AND 80 ) AS SubQuery6079 UNION ALL -- 80-100的人数 SELECT '80-100' AS 分数段, COUNT(*) AS 人数 FROM ( SELECT Student.Sno, AVG(grade) AS avg_score FROM Student JOIN SC ON Student.Sno = SC.Sno GROUP BY Student.Sno HAVING AVG(grade) BETWEEN 80 AND 100 ) AS SubQuery80100; ``` --- #### 5. 查询学生成绩重修(成绩<60)门数大于10门的学生基本信息 最后一部分要求筛选出那些有10门以上重修课程(成绩低于60分)的学生的基本信息。这一步同样需要使用到`GROUP BY`和`HAVING`子句,但是这次的重点在于如何统计重修的课程数量。 **知识点解析**: - **子查询**: - 在这里使用了一个子查询来计算每位学生重修的课程数量。 - 主查询根据这个子查询的结果进一步筛选出符合条件的学生。 **示例代码**: ```sql SELECT Student.Sno AS 学号, Sname AS 姓名, Ssex AS 性别 FROM Student WHERE EXISTS ( SELECT * FROM SC WHERE SC.Sno = Student.Sno GROUP BY SC.Sno HAVING COUNT(*) FILTER (WHERE grade < 60) > 10 ); ``` 以上就是本次实验的所有知识点详解。这些SQL语句不仅能够帮助理解如何进行数据统计处理,同时也展示了SQL的强大功能和灵活性。
- 粉丝: 245
- 资源: 12
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 质子交膜燃料电池(PEMFC Simulink模型) (1)仿真内容:包括燃料电池静态模型、燃料电池动态模型 ①静态模型:可以得
- 锂枝晶温度场耦合模型到手就能用
- 分布式算法ADMM模型,以三个主体进行l能量共享为背景 仿真平台:matlab+yalmip+cplex
- 10kV线路微机继电保护装置源代码,配套pcb图纸和bom 适合自己学习的素材,也可作为基础版本工程,缩短开发周期 为源码和
- 转动惯量和阻尼系数协同自适应控制策略 建立 VSG 的数学模型,分析各参数对系统输出特性的影响; 在 VSG 控制的基础上引
- 同步发电机阻抗扫描法,仿真模型,不 伍文华lunwen复现 阻抗模型分析VSG!
- 《机器人SLAM导航》课件(简略版)-第6章 机器人底盘
- 四轮轮毂电机驱动车辆直接横摆力矩控制(DYC),转矩矢量分配(TVC)的仿真搭建和控制 整体采用分层控制策略 其中顶层
- IT+Java开源项目分类与应用
- 迅达CADI调试软件3.11.3或3.10 迅达5系GX和7系TX操作说明