0
私はユーザーが持っているポイント(お金)に基づいてリーダーボードを構築しようとしています。ポイントは複数のテーブルに保存され、一部のユーザーは特定のテーブルにポイントを持たない場合があります。MySQL複数のテーブルの複数の行の合計を取得し、合計を降順で並べ替えるにはどうすればよいですか?
Table: account
--------------------------
| uid | name | locker |
|-----|---------|--------|
| 1 | Bob | 15 |
| 2 | Dave | 2 |
| 3 | Jim | 5 |
--------------------------
Table: container
------------------------
| account_uid | money |
|-------------|--------|
| 1 | 4 |
| 3 | 1 |
| 3 | 2 |
| 3 | 4 |
------------------------
Table: vehicle
------------------------
| account_uid | money |
|-------------|--------|
| 2 | 2 |
| 2 | 1 |
| 3 | 2 |
------------------------
私は、その結果の出力リレーを見たいのですが -
Bob 19
Jim 14
Dave 5
いくつかのテーブルには、いくつかの人々のためのポイントを持っていませんのでご注意を。
このコードは私のためには機能しませんでした。それは何とかポイントを複製したようです。
SELECT
act.name,
act.uid,
SUM(COALESCE(act.locker,0) + COALESCE(con.money,0) + COALESCE(veh.money,0)) AS total
FROM account as act
LEFT JOIN container as con
ON act.uid = con.account_uid
LEFT JOIN vehicle as veh
ON act.uid = veh.account_uid
Group By act.name
ORDER BY total DESC
ユーザーは、より一般的に二つの容器または媒体、またはいずれかを持っている場合、私は唯一のダブルポイントを期待する(ポイントの合計)X X(コンテナ内の行をマッチング)(車両内の行に一致する) –
申し訳ありません!それを反映するようにテーブルを更新しました。私は最初の投稿にそれを追加するのを忘れていました。 – Damien