Mysql 按3个表的联接平均标记划分的SQL组

Mysql 按3个表的联接平均标记划分的SQL组,mysql,sql-server,Mysql,Sql Server,我有三张桌子: 学生: 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是主键,而Subject表中的stud\u id int、mark\u id int是辅助键 数学平均分在8.5分(

我有三张桌子:

学生:

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
是主键,而Subject表中的
stud\u id int、mark\u id int
是辅助键

数学平均分在8.5分(满分10分)以上的学生,如何才能得到他们的名字、姓氏和平均分

在这里,我开始编写查询,但我不知道如何使用AVG函数、alias和groupby函数

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 ???

在HAVING子句中使用AVG

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


GROUPBY最后一个

在HAVING子句中使用AVG

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

GROUP BY是最后一个

两者,并具有一个
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
和都有一个
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

@Gholamali Irani因为
mark
只出现在您的一个表中,您不需要完全限定它-但如果您愿意,您肯定可以。不需要“as”关键字来显示别名?以及如何指定“数学”主题的平均值为8.5?列名应为first_name,last_name。因为没有关于“第一个”和“最后一个”的列。@Gholamali Irani因为
mark
只出现在您的一个表中,所以您不需要完全限定它-但如果愿意,您肯定可以。不需要“as”关键字来显示别名?以及如何指定“数学”主题的平均值为8.5?列名应为first_name,last_name。因为这里没有关于第一个和最后一个的列。