SQL Server中的问题

1 . 按学号分组,求平均分: 直接用SQL语句: sql SELECT 学号, AVG(成绩) AS 平均分 FROM 学生成绩表 GROUP BY 学号;
2 . 按班级号分组,求平均分: 先连接两个表,然后分组: sql SELECT 班级号, AVG(成绩) AS 平均分 FROM 学生成绩表 score, 学生基本资料表 stu WHERE stu.学号 = score.学号 GROUP BY 班级号;
3 . 显示特定班级学生的成绩: 添加班级号条件: sql SELECT stu.学号, 姓名, 课程号, 成绩 FROM 学生成绩表 score, 学生基本资料表 stu WHERE stu.学号 = score.学号 AND 班级号 = 'bj01 ';
4 . 显示学生姓名、课程名和成绩: 再连接课程表: sql SELECT stu.学号, 姓名, c.课程名, 成绩 FROM 学生成绩表 score, 学生基本资料表 stu, 课程表 c WHERE stu.学号 = score.学号 AND c.课程号 = score.课程号;

SQL语句,如何求每个学生的成绩与平均成绩的差?

哎,跟你讲讲我当年干的事。
去年吧,我在帮学校整理学生成绩,那数据可真多,几千个学生呢。
那时候我就琢磨,怎么让每个学生的成绩跟班里的平均分比一比,看看谁高谁低。
直接写个SQL查询吧,结果搞得我头都大了,代码乱七八糟的。

后来我试了个方法,用CTE,感觉清晰多了。
就拿那个“test”表说事儿吧,里面存着“学号”、“姓名”和“成绩”这些信息。
我先是建了个CTE,就叫它“cte”吧,把表里的所有数据都给选出来了:WITH cte AS (SELECT FROM test)
然后呢,我在外面再写个查询,把每个学生的成绩减去那个班级的平均成绩。
你看这样写:
SELECT , 成绩
(SELECT AVG(成绩) FROM cte) AS 平均成绩 FROM cte
就这么简单。
外层的SELECT语句先选出所有列,然后每个学生的成绩都减去那个班级的平均成绩,结果作为一个新列“平均成绩”显示出来。
这下清晰多了,谁跟平均分差多少,一目了然。

我那时候试了试,确实好用。
要是后来要改条件,比如分科目或者分年级算,只要在查询里加个WHERE条件就行。
比如分科目,你就在SELECT里加个条件,像WHERE 科目='数学'之类的。

不过啊,我那时候用SQL的时候,CTE这玩意儿刚开始学,还不太熟练。
有时候写错了,表名或者字段名一弄错,查询就跑不通。
所以啊,写SQL的时候,一定要小心,别看简单,一个小错就全乱了。

总的来说,用CTE处理这种成绩差异的问题,确实方便多了。
我当时弄完之后,领导还夸我呢,说这方法挺好。
你试试看,肯定比我当年强。

AVG函数在SQL中怎么用_AVG函数求平均值的详细步骤

AVG自动忽略NULL,只算数值列。
比如工资列有NULL,算平均值时NULL不算。
用WHERE筛选,比如工资>3 000的部门。
用GROUPBY按部门分组,每个部门算个平均工资。
HAVING过滤分组结果,比如平均工资>5 000的部门才显示。
列要是数值型,字符串不行,否则报错。
比如员工表工资列,直接SELECT AVG(工资)。
选工资列,数据类型要是INT或DECIMAL。
WHERE条件是科目='数学',只算数学平均分。
GROUPBY班级,每个班级算个平均分。
HAVING AVG(工资)>5 000,只显示工资平均>5 000的部门。
自己掂量。