sql - 结合3个表,根据平均分取名字
问题描述
我有一个关于 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
解决方案
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
推荐阅读
- c# - 投射 IQueryable
到 IQueryable 具有更好的性能 - image-processing - ImageMagick/etc.:从扫描中自动去除不干净的边缘?
- django - 通过 Django 中的子查询更新字段
- swiftui - 需要在用户滚动视图 SwiftUI 时停止更新整个视图
- angular - 元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型“对象”TS7053
- java - 动态映射 json
- moralis - 如何在节点JS云功能中运行moralis
- c# - ASP.NET Core Razor Page create new for list 总是给出 System.NullReferenceException
- android - 如何从 Compose 中添加现有片段
- c# - 精灵在 Unity 中翻转时改变大小