SQL 查询:查询学生平均成绩

Wesley13
• 阅读 131

  编程萌新,因为遇到这么个SQL 查询的问题:在一张表A里有如下字段:学生姓名、学科名、学科成绩。写一条SQL 语句查出各科平均成绩并按学生姓名分组,按如下格式显示:学生姓名|语文|数学|英语。一开始遇到的时候挺懵的,有印象但是却忘了怎么写了,接下来就是查阅资料并亲自上手测试是否可行~

  第一次代码修修改改如下,此时还是在只用一张表来查询(无法实现上述目标结果,贴图只是为了说明下思考路线):

 1 select UName,
 2 (select AVG(Grades) from UserInfo where GName = '语文') as '语文',
 3 (select AVG(Grades) from UserInfo where GName = '数学') as '数学',
 4 (select AVG(Grades) from UserInfo where GName = '英语') as '英语' 
 5 from UserInfo
 6 where UName = '小明'
 7 group by UName
 8 /*having GName = '语文' and GName = '数学' and GName = '英语'*/
 9 order by AVG(Grades)
10 go

  然后查阅资料也没有头绪,就想只用一张表是否真的可行,要不用两张表试一下?接下来就是在原表A(实际为如下代码中 UserInfo表)基础上插入一个 学生id 的字段,然后新建一张学生表(T_User),拥有两个字段:id、姓名,学生表的id匹配表A里的学生id,查询语句通过连接实现(因为是思考一个问题,就不考虑内外或者交叉连接的问题了),代码如下:

1 select UName,
2 (select AVG(Grades) from UserInfo where GName = '语文' and UName = tu.name) as '语文',
3 (select AVG(Grades) from UserInfo where GName = '数学' and UName = tu.name) as '数学',
4 (select AVG(Grades) from UserInfo where GName = '英语' and UName = tu.name) as '英语' 
5  from UserInfo as ui join T_User as tu
6  on ui.UName = tu.name
7 group by ui.UName,tu.name
8 go

  运行测试如下:

SQL 查询:查询学生平均成绩

  成功!研究并解决差不多花了1个多小时,可能资质不行,但是会继续努力。从简单入手,从萌新出发~

点赞
收藏
评论区
推荐文章
执键写春秋 执键写春秋
1年前
自由编程——对输入内容排序(字符串拆分、对象比较)
题目:从键盘上输入以下的数据:"TOM:89|JERRY:90|TONY:95",数据格式为“姓名:成绩|姓名:成绩|姓名:成绩”,对输入的内容按成绩进行排序,并将结果按成绩由高到低排序。第一步,通过阅读题目,对TOM:89|JERRY:90|TONY:95以“|”拆分后是,TOM:89、JERRY:90和TONY:95,对应三个学生对象,所以要有一个学生类
Easter79 Easter79
1年前
sql多表连接查询
本文主要列举两张和三张表来讲述多表连接查询。 新建两张表: 表1:student  截图如下: ![SQL多表连接查询(详细实例)_新客网](http://static.oschina.net/uploads/img/201406/12160627_gvI7.jpg) 表2:course  截图如下: ![SQL多表连接查询(详细实例)_
Wesley13 Wesley13
1年前
HQL练习1
表结构: uid,subject\_id,score 求: 找出所有科目成绩都大于某一学科平均成绩的用户 建表语句 create table if not exists score(uid string,subject string,score int) row format delimited fields terminat
Wesley13 Wesley13
1年前
MySQL 24小时入门笔记(3),插入和删除,删库到跑路
MySQL 24小时入门笔记 ============== 插入 -- ### INSERT `INSERT`用法非常简单。现在我们有表`students`如下。 列名 类型 约束 id int primary key name char(16) NOT NULL 向里面插入一条学号为`1`,姓名为`学姐`的学生,只需要写如下`SQ
Wesley13 Wesley13
1年前
java面试之n+1问题
在一对多或者多对多的时候。如果通过一的一方取获得多的一方的数据。除了第一次查询表的数据以外。每获得一条多的一方的数据就查询一次。 如:通过学生表的记录查询成绩表的记录。 一个学生就查询一次,50个学生就查询50次。 如果需要查询50个学生的成绩,需要查询数据库的次数为 第一次查询学生的记录+50次查询成绩的记录。这个情况我们成为 N+1. //需求:
Wesley13 Wesley13
1年前
MySQL技巧(一)
**NOT IN 与 IN** 假设我们又一张score表如下   ![](https://oscimg.oschina.net/oscnet/0dbb6ed646da67bfc256ba72bd0d6b72ade.png) 我们需要查询所有不是性别代号为"0"的学生数据 SELECT * FROM score WHERE id NOT
Wesley13 Wesley13
1年前
mysql查询每个学生的各科成绩,以及总分和平均分
今天看一个mysql教程,看到一个例子,感觉里面的解决方案不是很合理。 问题如下: 有学生表: ![在这里插入图片描述](https://oscimg.oschina.net/oscnet/07b001b0c6cb7e0038a9299e768fc00a0d3.png) 成绩表: ![在这里插入图片描述](https://oscimg.o
Wesley13 Wesley13
1年前
MySQL数据库
\[toc\] 学生管理系统数据库设计 =========== > 设计一套数据库首先要熟悉当前系统有哪些功能,具体的业务流程是什么 学生管理系统功能介绍 ---------- 一套学校用的学生管理系统,最核心的功能如下 1. 学生信息管理(增加学生,删除学生,修改学生,查询学生信息==简称:CURD) 2. 老师信息管理(CURD) 3.
Stella981 Stella981
1年前
Django多对多模型自定义中间媒介(through)在运行期的表现
使用自定义中间媒介来实现多对多关系的时候,主要的目的是在中间媒介中保存关系的特有属性。举个例子,比如学生与课程之间的关系就属于多对多的,而且当学生与课程建立关系之后随之还会产生附属的属性,如:成绩。 如下例: <!-- lang: python --> class Student(models.Model): name =
3A网络 3A网络
2个月前
天天写 SQL,这些神奇的特性你知道吗?
天天写 SQL,这些神奇的特性你知道吗? 一 SQL 的第一个神奇特性日常开发我们经常会对表进行聚合查询操作,但只能在 SELECT 子句中写下面 3 种内容:通过 GROUP BY 子句指定的聚合键、聚合函数(SUM 、AVG 等)、常量,不懂没关系我们来看个例子 听我解释有学生班级表(tblstudentclass) 以及数据如下textDROP TAB
codedecent codedecent
6个月前
这道SQL有一点...不一样?
原题目 从课程表(课程号,课程名) 学生表(学号,年龄,性别,课程号,分数)中 查询出平均分大于60分的学生的学号及课程成绩 最初尝试一开始不太会做,直接在网络上搜索答案,找到的却只有这样的题目答案sqlSELECT sid, AVG( sscore ) FROM score GROUP BY sid HAVING avg( sscore ) 60单表操作