【问题标题】:Get all values from biggest group从最大的组中获取所有值
【发布时间】:2017-08-02 15:39:02
【问题描述】:

我有一张学生桌子和一张他们借来的书。我需要找到一个借书最多的学生,并显示这些书的标题。

目前我有一个学生列表和每个学生借的书的数量,按降序排列。我可以使用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;

如何显示借书最多的学生的书名?

【问题讨论】:

    标签: sql ms-access ms-access-2007


    【解决方案1】:

    要获得借书最多的学生:

    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
                     );
    

    【讨论】:

    • 但我想显示学生借阅的所有书籍的标题。目前,当我选择标题时,它只选择一个标题,但学生借了很多标题。
    • 我是SQL的初学者,所以我花了一段时间才明白我做错了什么,因为我的问题中的查询与我的真实查询不同,但我终于明白了。谢谢。
    猜你喜欢
    • 2021-01-21
    • 1970-01-01
    • 2020-08-16
    • 2020-11-03
    • 2012-03-28
    • 2018-12-09
    • 2018-09-22
    • 2011-10-04
    • 2021-03-01
    相关资源
    最近更新 更多