我有捐赠者表:
id,name,phone,address
捐款表:
id,donater_id,donation_amount
我想要的是让所有捐赠者的最大捐赠金额如下:
id,name,donation_amount
我尝试了以下查询来获得结果。
select a.id,a.name,max(b.donation_amount) max_d
from donaters a left join donations b on b.donater_id = a.id
groub by a.id,a.name,max_d
然而,它会返回重复。
答案 0 :(得分:1)
只需使用GROUP BY
和MAX
SELECT dr.id, dr.name, MAX(ds.donation_amount) as donation_amount
FROM donaters dr
JOIN donations ds On dr.id = ds.donater_id
GROUP BY dr.id, dr.name
此解决方案将错过没有捐赠任何东西的捐赠者。如果您需要此类捐赠者,请使用LEFT JOIN
和ISNULL
功能。
答案 1 :(得分:0)
这应该可以正常工作,基于id的基本左外连接,然后在donation_amount上聚合最大函数。
SELECT a.id,a.name,max(donation_amount) from Donaters a
LEFT outer JOIN Donations b
ON a.id=b.id
group by a.id,a.name
答案 2 :(得分:0)
select Dtrs.Id ,Dtrs.name,MAX_Donations.donation_amount from
Donaters Dtrs left join (
Select Dtrs.id Dtrs_id ,Max(Dons.donation_amount) donation_amount from Donations Dons
inner join Donaters Dtrs on Dons.donater_id = Dtrs.id
Group By Dtrs.id) Max_Donations on Max_Donation.Dtrs_id = Dtrs.id