SQL 服务器中临时 table 学生的平均成绩
Average grade of student temporary table in SQL Server
我有一个包含以下 table 的数据库:
Students_T
(SNo, SDedc, SAddress)
Courses_T
(CNo,CDesc)
CoursesRegister_T
(CRNo, CR_CNo, CR_SNo, CRGrade)
我需要表示以下数据:
对于每个学生展示:
Student desc, Course desc, Course grade, Grades average
我需要为学生注册的每门课程执行此操作。
例如:
如果学生 A 注册了课程 B 并且他的成绩是 90
他也注册了 C 课程,他的成绩是 70,我想得到以下 table:
A B 90 80
A C 70 80
重要的是我需要使用具有 SELECT INTO
语法的临时 tables 但我无法弄清楚。
我正在使用 SQL 服务器。
有人知道怎么做吗?
编辑:
我已经这样做了:
select CR_ST_No, ST_Desc, CR_Desc, CR_Grade
into #Grades
from Students_T
left join CoursesRegister_T on CR_ST_NO = ST_No
where CRS_Desc is not null
select *
from #Grades
drop table #Grades
它给了我 table 除了平均值之外我需要的所有数据。
当我尝试将行 select *
更改为 select *, avg(CR_Grade)
无法执行。
这是 Window 函数的典型用例。您没有提供任何示例数据,我现在无法对其进行测试,但类似的东西应该可以工作:
SELECT s.SDedc, c.CDesc, r.CRGrade, AVG(r.CRGrade) OVER (PARTITION BY s.SNo) AS average_grade
FROM Students_T AS s
LEFT JOIN CoursesRegister_T AS r ON r.CR_SNo = s.SNo
LEFT JOIN Courses_T AS c ON r.CR_CNo = c.CNo;
根据您的问题和后续评论,您需要更改 select 语句以包含 group by
子句。
请通读 MSDN SELECT (Transact-SQL) 文章,了解 select
语句的结构,以及每个部分的解释和示例。
您收到错误消息的原因是 AVG
是一个聚合函数,因此要求所有不属于聚合的列都包含在 group by
子句中您的 select 声明。
我有一个包含以下 table 的数据库:
Students_T
(SNo, SDedc, SAddress)Courses_T
(CNo,CDesc)CoursesRegister_T
(CRNo, CR_CNo, CR_SNo, CRGrade)
我需要表示以下数据:
对于每个学生展示:
Student desc, Course desc, Course grade, Grades average
我需要为学生注册的每门课程执行此操作。
例如:
如果学生 A 注册了课程 B 并且他的成绩是 90 他也注册了 C 课程,他的成绩是 70,我想得到以下 table:
A B 90 80
A C 70 80
重要的是我需要使用具有 SELECT INTO
语法的临时 tables 但我无法弄清楚。
我正在使用 SQL 服务器。
有人知道怎么做吗?
编辑:
我已经这样做了:
select CR_ST_No, ST_Desc, CR_Desc, CR_Grade
into #Grades
from Students_T
left join CoursesRegister_T on CR_ST_NO = ST_No
where CRS_Desc is not null
select *
from #Grades
drop table #Grades
它给了我 table 除了平均值之外我需要的所有数据。
当我尝试将行 select *
更改为 select *, avg(CR_Grade)
无法执行。
这是 Window 函数的典型用例。您没有提供任何示例数据,我现在无法对其进行测试,但类似的东西应该可以工作:
SELECT s.SDedc, c.CDesc, r.CRGrade, AVG(r.CRGrade) OVER (PARTITION BY s.SNo) AS average_grade
FROM Students_T AS s
LEFT JOIN CoursesRegister_T AS r ON r.CR_SNo = s.SNo
LEFT JOIN Courses_T AS c ON r.CR_CNo = c.CNo;
根据您的问题和后续评论,您需要更改 select 语句以包含 group by
子句。
请通读 MSDN SELECT (Transact-SQL) 文章,了解 select
语句的结构,以及每个部分的解释和示例。
您收到错误消息的原因是 AVG
是一个聚合函数,因此要求所有不属于聚合的列都包含在 group by
子句中您的 select 声明。