首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建具有平均列的视图

创建具有平均列的视图
EN

Stack Overflow用户
提问于 2013-05-09 19:21:58
回答 3查看 94关注 0票数 0

我需要创建一个视图视图UOS_VU_STUDENT_AVERAGE,其中一个列要求是平均成绩,SQL:

代码语言:javascript
复制
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中平均评分?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-09 19:29:33

你必须对任何数学函数使用"Group by“,比如

代码语言:javascript
复制
AVG ( [ ALL | DISTINCT ] expression )

例如..

代码语言:javascript
复制
SELECT id, AVG(salary) from tablename GROUP BY filedname
票数 0
EN

Stack Overflow用户

发布于 2013-05-09 19:24:26

试一试

代码语言:javascript
复制
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评论的那样,没有连接条件,你可能需要这样的东西:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2013-05-09 19:53:52

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

代码语言:javascript
复制
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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16460571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档