我有一张学生桌和一张他们借来的书桌。我需要找一个借阅最多书籍并展示这些书籍标题的学生。
目前我有一份学生名单和每位学生借阅的书籍数量,按降序排序。我可以使用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 :(得分: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
);