SQL löytää suosituimpia kirjoja

Minulla on kirjapöytä

BookID BookName
 1       BookA
 2       BookB
 3       BookC

Jäsentaulukko

MemberID MemberName
 1          MemberA
 2          MemberB

Lainaa pöytää

MemberID BookID
 1         1
 1         2
 2         1
 2         2

Haluan löytää viisi suosittua kirjaa Memeber A:lta

Kokeilin seuraavaa kyselyä

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

Mutta tämä ei anna minulle todellista tulosta.

Kaikki ehdotukset olisivat tervetulleita.


person Owais Ahmed    schedule 19.09.2020    source lähde
comment
Merkitsit kysymyksesi MySQL-tunnisteella, mutta koodi ei toimi MySQL:ssä. Olen hämmentynyt.   -  person Gordon Linoff    schedule 19.09.2020
comment
Miten tulos eroaa odotuksistasi? Ja miksi liityt lainaavaan jäseneen kahdesti? Ja mitä kutsut jäsenen suosituksi kirjaksi? Tarkoitatko, että he lainaavat saman kirjan useammin kuin kerran ja luokittelet kirjat sen mukaan, kuinka usein jäsen lainasi niitä?   -  person Thorsten Kettner    schedule 19.09.2020


Vastaukset (1)


Sinulla on mielestäni liian monta liittymistä:

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;

Huomautus: Tämä syntaksi liittyy yleensä SQL Serveriin, eikä se toimi MySQL:ssä. MySQL:ssä käyttäisit LIMIT 5 eikä SELECT TOP (5).

person Gordon Linoff    schedule 19.09.2020