选择他的最大捐赠捐赠者

时间:2017-10-03 06:44:51

标签: sql oracle

我有捐赠者表:

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 

然而,它会返回重复。

3 个答案:

答案 0 :(得分:1)

只需使用GROUP BYMAX

即可
  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 JOINISNULL功能。

答案 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

Here for more information