Mysql - 获取关系计数最低的行

标签 mysql sql algorithm

我有两个 mysql 表:

  1. Teacher 包含列 id, name, age
  2. 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/

相关文章:

mysql - 从表中选择行,其中列值是存储过程中传递的值的子集

sql - 是否有可能在 YQL 中获得两个结果集的交集或差异?

algorithm - 解决循环链表的方法是什么?

algorithm - 使用位旋转截断整数

c++ - C++提高了检查BST是否高度平衡的效率?

php - MySQL 查询上的连接重置

mysql - 在单个查询中按值获取行数

MySQL 链式不等式

mysql - IAM 数据库身份验证 - 如何使用 CLI 生成的 token

php - Select 语句根据 sql 中的时间戳计算匹配日期(而不是时间)