我需要创建一个视图视图UOS_VU_STUDENT_AVERAGE,其中一个列要求是平均成绩,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中平均评分?
发布于 2013-05-09 19:29:33
你必须对任何数学函数使用"Group by“,比如
AVG ( [ ALL | DISTINCT ] expression )例如..
SELECT id, AVG(salary) from tablename GROUP BY filedname发布于 2013-05-09 19:24:26
试一试
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-09 19:53:52
您需要执行类似以下的操作。我对表的结构做了一些假设。
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。
https://stackoverflow.com/questions/16460571
复制相似问题