由3个表的JOIN的AVG标记的SQL组

时间:2017-12-03 18:23:06

标签: mysql sql-server

我有3张桌子:

学生:

id: int AUTO_INCREMENT
first_name: char(30)
last_name: char(30)

商标:

id: int AUTO_INCREMENT
mark: int

主题:

id: int AUTO_INCREMENT
name: char(30)
stud_id int
mark_id int

所有列中id为主键,而主题表中的stud_id int, mark_id int为辅助键。

如何获得数学上平均分数高于8.5(满分10分)的所有学生的名字,姓氏和平均分数?

这里我开始编写查询,但我不知道如何使用AVG函数,别名和Group By函数

SELECT student.first, student.last, ??? as avg_mark 
FROM subject
JOIN student on student.ID = subject.stud_id
JOIN marks on marks.id = subject.mark_id
Where ???

2 个答案:

答案 0 :(得分:1)

将AVG与HAVING子句一起使用。

在每个表名旁边的FROM子句中使用别名。

GROUP BY排在最后

答案 1 :(得分:1)

都有avg函数(AFAIK,它是由ANSI SQL标准定义的)。请注意,它是一个聚合函数,因此您无法使用where子句对其应用条件 - 您需要使用having子句:

SELECT   student.first_name, student.last_name, AVG(mark) avg_mark 
FROM     subject
JOIN     student on student.ID = subject.stud_id
JOIN     marks on marks.id = subject.mark_id
GROUP BY student.first, student.last
HAVING   AVG(mark) > 8.5