0
私は3つのテーブルを持っています。 1つはユーザーを格納し、1つは各ユーザーに経費を格納し、3つ目のテーブルは各ユーザーの戻り値を格納します。それぞれはユーザーによって接続されています。しかし、サービスを使用しないユーザーが多いので、ユーザーの全員の表をスキャンしないようなソリューションは避けてください。2つの異なるテーブルから同じメンバーのSUM値を返します
私はMySQL btwを使用しています。
users: id, name
expenses: id,userid,amount,date
returns:id,userid,amount
サンプル・データは、次のようになります。
users:
1 Sosuna
2 Mike
expenses:
1 1 100 2017-01-01
2 1 20 2017-01-13
3 2 50 2017-02-13
returns:
1 1 20
2 1 10
3 1 30
4 1 10
今期待される出力は、単にそれらのコンボです。ユーザーは経費の中にこれまで存在していたことのないリターンで存在することはできません。
user_id name total_expenses total_returns
1 Sosuna 120 70
2 Mike 50 0
私はいくつかのクエリを試しましたが、何も動作しません。このUNION ALL問合せは機能しますが、出力は必要なものではありません。私は、任意のフロントエンドのものを使用することなく、敬遠しがち出力を持つことを望む:
SELECT SUM(amount) as total_given,userid,'expense' as source FROM `expenses` GROUP BY userid,source
UNION ALL
SELECT SUM(amount) as total_returned,userid,'returnedback' as source FROM returns GROUP BY userid,source ORDER BY userid,source
それは動作しますが、私が望むよりも遅く表示されます。私は約300kのユーザーを持っています。 –