Sql 合并3个表,根据平均分数获得名称
我有一个关于sql的问题。 我有三张桌子Sql 合并3个表,根据平均分数获得名称,sql,inner-join,average,aggregate-functions,having-clause,Sql,Inner Join,Average,Aggregate Functions,Having Clause,我有一个关于sql的问题。 我有三张桌子 表1是学生。它有学生id和学生姓名 表2是学校。它有学校id和学校名称 表3是分数。它有学校id、学生id和分数 我试着写一个查询,若那个所学校的平均分数在70分以上,你们可以选择学校名称 分数表如下所示。我知道,同一个学生上两所学校听起来很愚蠢。忽略这一逻辑 得分 STUDENT_ID SCHOOL_ID SCORE 1 4 90 1 7 67 3
- 表1是学生。它有学生id和学生姓名
- 表2是学校。它有学校id和学校名称
- 表3是分数。它有学校id、学生id和分数
STUDENT_ID SCHOOL_ID SCORE
1 4 90
1 7 67
3 5 87
3 4 78
5 3 56
6 4 95
您可以使用
having
子句进行聚合和筛选。如果您只需要学校的id
,只需查看分数表即可获得您想要的结果:
select school_id, avg(scores) avg_score
from scores
group by school_id
having avg(scores) > 70
如果您想要学校名称,请使用join
:
select sh.school_id, sh.school_name, avg(sc.scores) avg_score
from schools sh
inner join scores sc on sc.school_id = sh.school_id
group by sh.school_id, sh.school_name
having avg(sc.scores) > 70
作业,很好。你试过什么?你遇到什么问题了吗?在寻求帮助时,这是一个很好的开始。你是否通过在课后放sh和分数后放sc来缩短表名?@SimpleProgramer:这些是表别名,是SQL语言的一个非常有用的功能。实际上,我对问题做了一些编辑。我只需要学校name@SimpleProgramer:因此只需从
select
子句中删除sh.school\u id
。。。