【发布时间】:2016-04-04 19:28:20
【问题描述】:
我有 2 张桌子:
T1 {
id: string;
school: string
}
和
T2 {
school_id: string;
student_id: string;
tuition_fee: double
}
这 2 个表通过 T1.id 和 T2.school_id 关联。 T1 包含每所学校的信息。它相对较小。 T2 包含每个学生的学费信息。它可能很大(数百万条记录)。
编辑:
现在,我想知道哪 3 所学校向学生收取的学费最多。 假设 2 所学校从所有学生那里收取相同数额的总学费是不可能的。 我的解决方案如下:
- T2 中按 school_id 分组记录;
- 计算每组的学费总和;
- 按总和降序对组进行排序;
- 获得前三名。
我的问题是:
- 有更好的方法吗?
- 执行此操作最有效的 SQL 是什么?
- 为了提高速度还有其他需要考虑的因素吗?例如使用索引、视图等。
【问题讨论】:
-
你的方法很好。这一切都应该在一个查询中完成。
-
@GordonLinoff,我的直觉告诉我可能不需要第 3 步中的排序...
-
你确定你的问题是正确的吗?学费可能有联系。甚至,超过三所学校的顶级学费。那你应该返回什么?
-
假设不存在这样的歧义。查看我的编辑。
标签: sql database algorithm optimization query-optimization