【问题标题】:Combine 3 tables and get name according to average scores结合3个表,根据平均分取名字
【发布时间】:2021-02-28 02:31:38
【问题描述】:

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

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

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

  • 表 3 是分数。它有学校ID,学生ID和分数

如果该学校的平均分数高于 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

【问题讨论】:

  • 家庭作业,很好。你试过什么?你有遇到什么问题吗?在寻求帮助时,minimal reproducible example 是一个很好的开始。

标签: sql inner-join average aggregate-functions having-clause


【解决方案1】:

您可以使用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 放在 school 后面,sc 放在 score 后面来缩短表名?
  • @SimpleProgramer:这些是表别名,SQL 语言的一个非常有用的特性。
  • 我实际上稍微编辑了这个问题。我只需要学校名称
  • @SimpleProgramer:所以只需从select 子句中删除sh.school_id...
猜你喜欢
  • 2018-05-14
  • 1970-01-01
  • 1970-01-01
  • 2016-09-08
  • 2022-01-28
  • 2018-11-18
  • 1970-01-01
  • 2016-12-09
  • 2021-06-23
相关资源
最近更新 更多