Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 合并3个表,根据平均分数获得名称_Sql_Inner Join_Average_Aggregate Functions_Having Clause - Fatal编程技术网

Sql 合并3个表,根据平均分数获得名称

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

我有一个关于sql的问题。 我有三张桌子

  • 表1是学生。它有学生id和学生姓名

  • 表2是学校。它有学校id和学校名称

  • 表3是分数。它有学校id、学生id和分数

我试着写一个查询,若那个所学校的平均分数在70分以上,你们可以选择学校名称

分数表如下所示。我知道,同一个学生上两所学校听起来很愚蠢。忽略这一逻辑

得分

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