我有两个 mysql 表:
- Teacher 包含列
id, name, age
- Student 包含
name, age, teacher_id
列,其中teacher_id
是分配学生的老师的 ID。
现在,教师之间的负担应该平均分配。每次向系统添加新学生时,我都需要为它分配一个最不忙的老师,即分配给它的学生人数最少。
有没有真正快速的方法来做到这一点?最初,我认为我可以使用 group by teacher_id
并按计数对其进行排序以获取它。但是,这会排除尚未分配任何学生的教师。
如果我们使用连接,如果学生表有 100 万行,性能会如何?
最佳答案
您只需要一个外部联接来包括拥有零个学生的教师。
select t.id, t.name
from teacher t
left join student s on t.id = s.teacher_id
group by t.id
order by count(s.name)
limit 1
您可以使用非规范化(一个包含每个教师预先计算的学生人数的列),但是,这是一个坏习惯,如果不是真的不可避免,我不会推荐它。
关于Mysql - 获取关系计数最低的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48816406/