Ich versuche, eine Tabelle zu erhalten, die aus 4 Tabellen besteht: clients
, groups_clients
, client_data1
, client_data2
;Wie 4 Tabellen mit SQL-Unterabfrage kombinieren?
Kunden
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 |
Die wünschenswerte Tabelle wie diese
GroupName | SUM(Buy) | SUM(Trade) | SUM(With) | SUM(Depos) |
------------------------------------------------------------
Group1 | 13 | 26 | 1 | 24 |
Group2 | 3 | 11 | 14 | 11 |
sollte die Abfrage alle Zeilen aus table_data1
und genommen table_data2
genommen Summe sollte in dem Datum some date
und Gruppe ist es von group name
Hier ist mein Code:
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
Aber das Ergebnis ist irgendwie schrecklich. Es gibt viele gleiche Gruppen hintereinander aus, scheint nicht von groupname
gruppiert worden zu sein. Also ... ich brauche deine Hilfe, Leute. Irgendwelche Ideen? Was soll ich tun, damit die Abfrage richtig funktioniert? Danke im Voraus!
Nein, aber ich werde versuchen –
Es funktioniert, aber die gezählten Zahlen sind zu groß. Sieht aus wie es in einer Kreisschleife geht und summiert oft die gleichen Werte. Wie kann ich das verhindern? – ex1t3
@Harry, diese Abfrage fällt in Konflikt mit dem, was als kartesisches Produkt bekannt ist. Führen Sie die Abfrage ohne die GROUP BY -Klausel aus und sehen Sie, ob Sie erkennen können, was falsch läuft. –