我需要找到将图书归还图书馆的平均失踪天数最高的学生。我有2张桌子:
这是我使用子查询
执行此操作的方法select concat(fname, '', lname) as name
from users
where id in ( select id
from loaned
group by id
having avg(datediff(due, actual))
= ( select min(m)
from ( select avg(datediff(due, actual)) as m
from loaned
group by id
) as minavg
)
);
我怎样才能用JOIN解决这个问题?
答案 0 :(得分:1)
select concat(fname, '', lname) as name
from users u
join loaned l on l.id = u.id and due < actual
group by 1
order by avg(actual - due) desc
limit 1
此查询仅取得延迟的图书的平均值,而不是整体平均值。对于全部平均值,请移除and due < actual
返回所有平均分享最高的学生:
select concat(fname, '', lname) as name
from users u
join loaned l on l.id = u.id and due < actual
group by 1
having avg(actual - due) = (
select avg(actual - due)
from loaned
where due < actual
group by id
order by 1 desc
limit 1)