我需要创建一个视图 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 中平均成绩?
我需要创建一个视图 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 中平均成绩?
尝试
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
)
您必须对任何数学函数使用“分组依据”,例如
AVG ( [ ALL | DISTINCT ] expression )
例如 ..
SELECT id, AVG(salary) from tablename GROUP BY filedname
您需要执行以下操作。我对表格的结构做了一些假设。
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。