合并3张表,按平均分取名
Combine 3 tables and get name according to average scores
我有一个关于 sql 的问题。
我有 3 tables.
Table 1 是学生。它有学号和学生姓名
Table 2是学校。它有学校ID和学校名称
Table 3是分数。它有学号、学号和分数
我正在尝试编写一个查询,其中您 select 学校名称,如果该学校的平均分数高于 70。
分数 table 看起来像这样。我知道,同一个学生去 2 所学校听起来很愚蠢。忽略那个逻辑
分数
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
,只看分数table就可以得到你想要的结果:
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
我有一个关于 sql 的问题。 我有 3 tables.
Table 1 是学生。它有学号和学生姓名
Table 2是学校。它有学校ID和学校名称
Table 3是分数。它有学号、学号和分数
我正在尝试编写一个查询,其中您 select 学校名称,如果该学校的平均分数高于 70。
分数 table 看起来像这样。我知道,同一个学生去 2 所学校听起来很愚蠢。忽略那个逻辑
分数
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
,只看分数table就可以得到你想要的结果:
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