选择平均失踪天数最多的学生

时间:2013-09-21 14:09:39

标签: mysql sql

我需要找到将图书归还图书馆的平均失踪天数最高的学生。我有2张桌子:

  • 用户 - > id,fname,lname,professional
  • 借出 - > isbn(书号),id,自(日期),到期日(日期),实际(日期)

这是我使用子查询

执行此操作的方法
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解决这个问题?

1 个答案:

答案 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)