This is giving you an error because you're trying to return every row from a query which is trying to give you an aggregate result.
The "max" operation is an aggregate function which means it says "give me a whole lot of rows, and I'll return you one result.
Whereas just saying "select *" isn't an aggregate operation, it just says "give me a result for each row that I select"
The easiest way to solve your problem and get all of the details for the row with max(donationsCollected) would be to do a select like:
select * from LibraryRepairEvent where donationsCollected =
SELECT MAX(LibraryRepairEvent.donationsCollected)
FROM LibraryRepairEvent
WHERE EXISTS (
SELECT 1 FROM MemberBorrowsBook
JOIN Book ON Book.bookID = MemberBorrowsBook.bookID
WHERE LibraryRepairEvent.organiserID = MemberBorrowsBook.memberID
)
I can't remember if you need to say "where donationsCollected = " or "where donationsCollected in" so give them both a try