私は4つのテーブルからなるテーブルを得ようとしています:clients
、groups_clients
、client_data1
、client_data2
;サブクエリSQLを使用して4つのテーブルを結合する方法は?
クライアント
clId| GroupId | Other |
------------------------
1 | 1 | gddgdg|
2 | 1 | dgdg |
3 | 2 | ddg |
4 | 2 | dd4g |
5 | 1 | ddg |
groups_clients
grId | GroupName|
-----------------
1 | Group1 |
2 | Group2 |
table_data1
clId | Date | Buy | Trade |
--------------------------------
1 | 2017-06-05 | 3 | 4 |
2 | 2017-11-10 | 6 | 9 |
2 | 2017-11-11 | 4 | 13 |
2 | 2017-03-01 | 11 | 0 |
4 | 2017-01-10 | 3 | 11 |
table_data2
clId | Date | With | Depos |
--------------------------------
1 | 2017-03-05 | 1 | 3 |
5 | 2017-08-10 | 0 | 8 |
2 | 2017-11-11 | 0 | 13 |
3 | 2017-03-01 | 11 | 0 |
4 | 2017-01-10 | 3 | 11 |
望ましいテーブルは、クエリがtable_data1
から採取されたすべての行を合計し、日付がsome date
とgroup name
によってグループにあるtable_data2
を取らなければならないこの
GroupName | SUM(Buy) | SUM(Trade) | SUM(With) | SUM(Depos) |
------------------------------------------------------------
Group1 | 13 | 26 | 1 | 24 |
Group2 | 3 | 11 | 14 | 11 |
ようにする必要がありますここに私のコードです:
SELECT
groups_clients.GroupName as group_name,
clients.GroupId AS groupid,
SUM(table_data1.buy) AS buy,
SUM(table_data1.trade) AS trade,
with,
depos
FROM
table_data1
INNER JOIN
(SELECT
SUM(table_data2.with) AS with,
clients.clId, GroupId
FROM
clients
LEFT JOIN
table_data2 ON clients.clId = table_data2.clId
AND table_data2.date <= '11-11-2016'
GROUP BY
GroupId, clId) clients ON table_data1.clId = clients.clId
LEFT JOIN
groups_clients ON groups_clients.Id = clients.GroupId
WHERE
table_data1.date <= '11-11-2016'
GROUP BY
clients.GroupId, With, Depos,
groups_clients.GroupName
しかし結果はちょっとひどいです。私はgroupname
でグループ化していないようです。だから...私はあなたの助けが必要です。何か案は?私はそれを正しく照会するために何をすべきですか?前もって感謝します!
いいえ、でも試してみます –
これは機能しますが、カウントされた数値は大きすぎます。それは円のループに入り、何度も同じ値を合計するように見えます。どうすればこれを防ぐことができますか? – ex1t3
@ハリー、このクエリは、デカルト積として知られているものの下落しています。 'GROUP BY'節を使わずにクエリを実行し、何が起こっているのかを知ることができるかどうか確認してください。 –