2017-10-03 6 views
0

でdonater選択私はDonatersテーブルを持っている:が彼の最大の寄付

id,name,phone,address 

寄付テーブル:

id,donater_id,donation_amount 

私がしたいことは、このような彼らの最大の寄付額ですべてdonatersを得ることです:

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 

ただし、重複を返します。

+1

あなた自身で何かをしようとしましたか? – JSapkota

+0

は、私はこれを試してみました:: 選択a.idを、a.nameを、最大(b.donation_amount)は、左 はa.idでb.donater_id = a.id groubに bの寄付に参加donatersから をmax_d。名前、 をmax_dが、それはあなたが速いです – BecauseGeek

答えて

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

+0

これは機能していますが、最初の内部結合を左結合に変更して、まだ寄付していない人を取得する必要がありました。 – BecauseGeek

+0

@BecauseGeek何も寄付しない – AliTheOne

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機能を使用してください。

+0

重複を返し、私は私の答えを削除します、あなたが句に間違っている:) –

0

これはちょうどうまくいくはずです。idに基づいてBasic left outer joinを行い、donation_amountでmax関数を集計します。

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 
+0

優れている、あなたはdonaters.idチェックし –

+0

のAAH大丈夫、間違った仮定をdonations.donation_amount必要があります。 –

+0

献金者が2回寄付した場合は2つのレコードが返されます – BecauseGeek