首页 > 解决方案 > 结合3个表,根据平均分取名字

问题描述

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

如果该学校的平均分数高于 70,我正在尝试编写一个查询,您可以在其中选择学校名称。

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

分数

STUDENT_ID  SCHOOL_ID  SCORE
    1          4         90
    1          7         67
    3          5         87
    3          4         78
    5          3         56
    6          4         95

标签: sqlinner-joinaverageaggregate-functionshaving-clause

解决方案


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

推荐阅读