我不知道怎么说这个,所以这个问题可能看起来很模糊。我会尽力描述我遇到的问题。
我有3张桌子:
LibraryRepairEvent
MemberBorrowsBook
Book
这就是LibraryRepairEvent的样子:
这就是MemberBorrowsBook的样子:
这就是Book的样子:
我想要做的是在那里的所有活动中,我想找到筹集最多捐款并从书桌上获取一些信息的组织者。
这是我到目前为止所做的:
SELECT *
FROM Book bk
JOIN (SELECT b.bookID, SUM(lre.donationsCollected) as maxDonations
FROM Book b
JOIN MemberBorrowsBook mbb
ON b.bookID = mbb.bookID
LEFT JOIN LibraryRepairEvent lre
ON mbb.memberID = lre.organiserID
) a
ON bk.bookID = a.bookID
GROUP BY maxDonations
ORDER BY maxDonations DESC
但是这个查询不能像它应该的那样工作。基于我包含的截图。它正在返回错误的信息。
根据示例,LibraryRepairEvent显示organiserId jessicaalba@gmail.com筹集的金额最高(累计捐款900)。现在,它将使用memberID上的join来查看MemberBorrowsBook表以获取bookID。所以这里我将把45441和45651作为bookID,然后将其带到Book表。所以现在最终的结果应该是这些ID的详细信息,但我收到了错误的数据。
请问我是否不确定。
答案 0 :(得分:1)
我认为应该这样做。相应地选择列。 我在这里设置了一个rextester demo,如果你自己这样做的话,它会帮助我们很多。也许下次: - )
select * from
(
select OrganiserID, sum(DonationsCollected) totalDonations from LibraryRepairEvent group by OrganiserID
) summary
join MemberBorrowsBook mbb on mbb.MemberID = summary.OrganiserID
join Book b on mbb.BookID = b.BookID
where totalDonations = (
select max(totalDonations) from
(
select sum(DonationsCollected) totalDonations from LibraryRepairEvent group by OrganiserID
) summary2
)
;
注意此语句返回与所有rank-1组织者相关的信息。因此,如果有多个人获得最高捐款额,则会报告所有捐款额。如果你只想要其中一个,这个陈述可以大大简化。