Mysql 选择平均缺勤天数最高的学生

Mysql 选择平均缺勤天数最高的学生,mysql,sql,Mysql,Sql,我需要找到在图书馆还书方面平均缺勤天数最高的学生。我有两张桌子: 用户->id、fname、lname、professional 借出->ISBN书号、id、起始日期、到期日期、实际日期 下面是我的方法,使用子查询 select concat(fname, '', lname) as name from users where id in ( select id from loaned group by id

我需要找到在图书馆还书方面平均缺勤天数最高的学生。我有两张桌子:

用户->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
                                  )
                      );
如何使用联接解决此问题

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
此查询只取迟到书籍的平均值,而不是总平均值。对于总平均移除和到期<实际

要返回所有具有相同最高平均值的学生,请执行以下操作:

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)

除了连接和作业之外,你的逻辑不是错了吗?你做事的方式是,如果一本书被提前归还,那么它就起到了一种抵消过期书的作用。那么呢?这有关系吗?我得把最近几天的名字取出来。我曾尝试过这样做,但我们的朋友,我们无法成功地加入行动。1组是什么意思?我知道GROUPBY是做什么的。@andrewcooke这是GROUPBY列1的法定SQL标准速记。一些比你更神圣的程序员回避它,但我接受它的简单和简洁,并且从未有过使用它会对清晰性或可维护性造成任何负面影响的情况,但是如果你有两个名字的晚日数相同,那么你的问题就无法回答。它确实回答了前面提到的问题。没有提到如何,甚至是否应该打破联系……但既然您现在提出了它,请参阅编辑后的答案,以获得我能想到的最简单的解决方案,即以相同的最大平均值返回所有学生