SQL находит самые популярные книги

У меня есть стол с книгами

BookID BookName
 1       BookA
 2       BookB
 3       BookC

Таблица участников

MemberID MemberName
 1          MemberA
 2          MemberB

Таблица займа

MemberID BookID
 1         1
 1         2
 2         1
 2         2

Я хочу найти пять популярных книг Мембера А.

Я попробовал следующий запрос

SELECT        TOP (5) Book.BookTitle, COUNT(*) AS Count, Member_1.MemberName
FROM            Book INNER JOIN
                         Borrow ON Book.BookID = Borrow.BookID INNER JOIN
                         Member ON Borrow.MemberID = Member.MemberID INNER JOIN
                         Member AS Member_1 ON Borrow.MemberID = Member_1.MemberID
                         where Member.MemberName='A'
GROUP BY Book.BookTitle, Member_1.MemberName
ORDER BY Count DESC

Но это не дает мне реального результата.

Любое предложение будет оценено.


person Owais Ahmed    schedule 19.09.2020    source источник
comment
Вы отметили свой вопрос MySQL, но код не запускается в MySQL. Я смущен.   -  person Gordon Linoff    schedule 19.09.2020
comment
Чем результат отличается от ожидаемого? И почему вы присоединяетесь к члену-заемщику дважды? А что вы называете популярной книгой участника? Вы имеете в виду, что они берут одну и ту же книгу более одного раза, и вы ранжируете книги по тому, как часто участник брал их?   -  person Thorsten Kettner    schedule 19.09.2020


Ответы (1)


Я думаю, что у вас слишком много соединений:

SELECT TOP (5) b.BookTitle, COUNT(*) AS Count, m.MemberName
FROM Book b INNER JOIN
     Borrow bo
     ON bo.BookID = b.BookID INNER JOIN
     Member m
     ON bo.MemberID = m.MemberID 
WHERE m.MemberName = 'A'
GROUP BY b.BookTitle, m.MemberName
ORDER BY Count DESC;

Примечание. Этот синтаксис обычно связан с SQL Server и не работает в MySQL. В MySQL вы бы использовали LIMIT 5, а не SELECT TOP (5).

person Gordon Linoff    schedule 19.09.2020