mysql - 选择具有最大值的行(值由连接生成)

标签 mysql sql join max

我有一个数据库,可以总结如下:

teacher (tid, f_name, l_name);
subject (sid, title);
teacher_subject (tid, sid);

我想要的是让教授最多科目的老师,我在这里看到了一些类似但不重复的问题,并且无法修补解决方案以达到我想要的,这就是我所拥有的写:

select max(num_subs) from
   (select t.f_name, t.l_name, count(t.tid) num_subs
    from teacher t
    join teacher_subject ts
    on t.tid = ts.tid
    group by t.tid)
max_subs;

但无法更进一步。我确信有办法到达它,因为我有时离它太近但从未达到。

最佳答案

这在 MySQL 中有点尴尬,因为缺少窗口函数或允许连接的限制子句,但你可以这样做:

select *
from teacher 
where tid in
(
  select tid
  from teacher_subject
  group by tid
  having count(*) =
  (
    select count(*)
    from teacher_subject
    group by tid
    order by count(*) desc
    limit 1
  )
);

仅供记录,在标准 SQL 中这仅仅是:

select *
from teacher t
order by (select count(*) from teacher_subject ts where ts.tid = t.tid) desc
fetch first 1 row with ties;

关于mysql - 选择具有最大值的行(值由连接生成),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49761457/

相关文章:

php - 优化查询性能

php - 更新 MySQL 数据库中 388 列的行

sql - 计算时间范围内列表中的项目 SQL

mysql - 包含排除项目的多表条件 JOIN

c# - 查询语法错误,但查询正确

Mysql:如何只导出所有表的索引?

mysql - SQL选择所有匹配的

sql - Pl/SQL- 从查询中获取列名

sql - 使用日期匹配的 select 语句中的多个值更新表

mysql - MySQL 中的 LEFT JOIN 给出与 INNER 或 RIGHT JOIN 相同的结果