2017-03-12 152 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子句中使用此过滤。但是你应该考虑到多个学生可能具有相同的价值。因此,使用in而不是=

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

这种逻辑可以插入到你的查询,所以你只返回顶部借款学生。

完整的查询看起来像:

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

但我想告诉所有的书学生借来的标题。目前,当我选择标题时,它只选择一个标题,但学生借了很多标题。 – FCin

+0

我是SQL初学者,所以花了我一段时间才明白我做错了什么,因为我的问题中的查询与我真正的查询不同,但我终于明白了。谢谢。 – FCin

相关问题