2017-02-06 13 views
0

私は以下のようなデータを持つmysqlの3つのテーブルを持っています。私のコーディングで何が問題なのか分かりません。クロステーブルのmysql計算

select 
    rev.memberid, 
    (sum(rev.earned)/rule.revperpoint) - sum(redeem.redeempoint) as bal 
from rev 
left join rule on rev.rulename = rule.rulename 
inner join redeem on rev.memberid = redeem.memberid 
group by rev.memberid; 

TABLE1ルール

rulename revperpoint 
CNY  2 
NY  1 

表2

memberid redeempoint 
25264833 100.00 
25264833 50.00 

期待出力

を償還表3

memberid earned rulename 
37638899 500.50 CNY 
37638899 400.50 CNY 
25264833 300.50 CNY 
2526833 600.50 CNY 

を吹けあなたの希望する結果に基づいて

memberid bal 
25264833 300.50 
37638899 450.50 
+0

一般的なコメント:INNER JOIN ** after ** OUTER JOINは、その効果を無効にします。 –

答えて

0

、テーブルrevにおける第四行は

25264833 600.50 CNY 

する必要があり、それが唯一のMEMBERIDが25264833をあるレコードをretriveます原因ここであなたは、inner joinを使用してはならない、これを試してみてください。

select 
    rev.memberid, 
    (sum(rev.earned)/rule.revperpoint) - coalesce(redeem.redeempoint, 0) as bal 
from rev 
left join rule on rev.rulename = rule.rulename 
left join (select memberid, sum(redeem.redeempoint) as redeempoint from redeem group by memberid) redeem on rev.memberid = redeem.memberid 
group by rev.memberid; 

およびdemoここに。

+0

ありがとうございます! – chancj