我需要创建一个视图VIEW UOS_VU_STUDENT_AVERAGE,其中一个列requries平均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中平均成绩?
答案 0 :(得分: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
)
答案 1 :(得分:0)
您必须使用“分组依据”来表示任何数学函数,例如
AVG ( [ ALL | DISTINCT ] expression )
例如..
SELECT id, AVG(salary) from tablename GROUP BY filedname
答案 2 :(得分: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。