2017-03-12 11 views
0

私は学生のテーブルと彼らが借りた本のテーブルを持っています。私は最も多くの書籍を借りた学生を探して、これらの本のタイトルを表示する必要があります。最大のグループからすべての値を取得

現在、私は学生のリストと、各学生が借りて降順にソートした本の数を持っています。私はTop 1を使って一番借りた学生を得ることができます。

SELECT TOP 1 Students.Name, Students.LastName, Count(Books.Title) AS BorrowedBooksCount 
FROM (Meldunek INNER JOIN Students ON Meldunek.pesel = Students.pesel) 
INNER JOIN Books 
ON Students.pesel = Books.pesel 
GROUP BY Students.Name, Students.LastName 
ORDER BY Count(Books.Title) DESC; 

ほとんどの書籍を借りた学生の書籍の名前を表示するにはどうすればよいですか?

答えて

0

ほとんど本を借りた学生取得するには:

select top 1 m.pesel 
from Meldunek as m 
group by m.pesel 
order by count(*) desc; 

あなたはフィルタリングのためwhere句でこれを使用することができます。しかし、複数の生徒が同じ価値を持つかもしれないことを考慮する必要があります。

where s.pesel in (select top 1 m.pesel 
        from Meldunek as m 
        group by m.pesel 
        order by count(*) desc 
       ); 

このロジックはあなたのクエリに挿入することができますので、あなただけのトップ借入学生を返す:だから、=ではなくinを使用しています。

完全なクエリは次のようになります。

select s.Name, s.LastName, b.Title 
from (Meldunek as m inner join 
     Students s 
     on m.pesel = s.pesel 
    ) inner join 
    Books as b 
    on s.pesel = b.pesel 
where s.pesel in (select top 1 m2.pesel 
        from Meldunek as m2 
        group by m2.pesel 
        order by count(*) desc 
       ); 
+0

しかし、私は、学生が借りたすべての書籍のタイトルを表示したいです。現在、タイトルを選択するときには1つのタイトルしか選択されませんが、学生は多くのタイトルを借りていました。 – FCin

+0

私は初心者ですので、私の質問の質問は私の実際のクエリとは異なるので、間違っていることを理解するのにはしばらく時間がかかりましたが、やっとそれを理解しています。ありがとうございました。 – FCin

関連する問題