SQL găsirea celor mai populare cărți

Am masa de cărți

BookID BookName
 1       BookA
 2       BookB
 3       BookC

Tabelul membrilor

MemberID MemberName
 1          MemberA
 2          MemberB

Tabel de împrumut

MemberID BookID
 1         1
 1         2
 2         1
 2         2

Vreau să aflu cinci cărți populare de Memeber A

Am încercat următoarea interogare

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

Dar asta nu îmi dă rezultatul real.

Orice sugestie ar fi apreciată.


person Owais Ahmed    schedule 19.09.2020    source sursă
comment
V-ați etichetat întrebarea MySQL, dar codul nu va rula în MySQL. Sunt derutat.   -  person Gordon Linoff    schedule 19.09.2020
comment
Cum este rezultatul diferit de ceea ce vă așteptați? Și de ce vă alăturați membrului împrumutat de două ori? Și cum numești carte populară a unui membru? Vrei să spui că ei împrumută aceeași carte de mai multe ori și tu clasați cărțile după cât de des le-a împrumutat membrul?   -  person Thorsten Kettner    schedule 19.09.2020


Răspunsuri (1)


Cred că ai prea multe unități:

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;

Notă: Această sintaxă este de obicei asociată cu SQL Server și nu funcționează în MySQL. În MySQL, ați folosi LIMIT 5 mai degrabă decât SELECT TOP (5).

person Gordon Linoff    schedule 19.09.2020