2

図書館に本を返却する平均欠席日数が最も多い学生を見つける必要があります。私は2つのテーブルを持っています:

  • ユーザー -> id、fname、lname、professional
  • 貸出中 -> isbn(図書番号), id, since(日付), due(日付), actual(日付)

サブクエリを使用してこれを行う私の方法は次のとおりです

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でこれを解決するにはどうすればよいですか?

4

1 に答える 1

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)
于 2013-09-21T14:55:18.720 に答える