0

我需要创建一个视图 VIEW UOS_VU_STUDENT_AVERAGE,其中一列要求平均 GRADE,SQL:

CREATE VIEW UOS_VU_STUDENT_AVERAGE AS
SELECT STUDENT.FIRST_NAME, STUDENT.LAST_NAME, STUDENT_MODULE.GRADE
FROM STUDENT, STUDENT_MODULE
WHERE STUDENT_ID<120000001 

我怎么能在这个 sql 中平均成绩?

4

3 回答 3

1

尝试

CREATE VIEW UOS_VU_STUDENT_AVERAGE AS
SELECT STUDENT.FIRST_NAME, STUDENT.LAST_NAME, avg(STUDENT_MODULE.GRADE)
FROM STUDENT, STUDENT_MODULE
WHERE STUDENT_ID<120000001 
group by STUDENT.FIRST_NAME, STUDENT.LAST_NAME

正如 zerkms 评论的那样,没有加入条件,你可能需要这样的东西:

CREATE VIEW UOS_VU_STUDENT_AVERAGE AS
SELECT STUDENT.FIRST_NAME, STUDENT.LAST_NAME, avg(STUDENT_MODULE.GRADE)
FROM STUDENT join STUDENT_MODULE on student_module.STUDENT_ID = student.id
WHERE STUDENT_ID<120000001 
group by STUDENT.FIRST_NAME, STUDENT.LAST_NAME

(我只是猜测 FK 已开启student_module.STUDENT_ID = student.id

于 2013-05-09T11:24:25.717 回答
0

您必须对任何数学函数使用“分组依据”,例如

AVG ( [ ALL | DISTINCT ] expression )

例如 ..

SELECT id, AVG(salary) from tablename GROUP BY filedname
于 2013-05-09T11:29:33.083 回答
0

您需要执行以下操作。我对表格的结构做了一些假设。

CREATE VIEW uos_vu_student_average AS
SELECT first_name, last_name,  AVG(grade) avg_grade
  FROM student, student_module
 WHERE student.student_id = student_module.student_id
   AND student.student_id < 120000001
 GROUP BY first_name, last_name;

在您的示例中,正如之前的海报所指出的那样,您在原始示例中没有加入,因此它只会将所有成绩平均在一起,而不管 student_id 是什么。结果将显示每个人的平均成绩相同。

在视图中执行聚合函数时,您还需要为结果列分配别名,以便在对视图执行 DML 时以某种方式引用它。在这种情况下,我将其分配为 avg_grade。

于 2013-05-09T11:53:51.817 回答