Mit SUMME mit mehreren joins in mysql
Ich habe auf der Suche nach einer Lösung für dieses, es gibt viele ähnliche Fragen, aber keiner alle richtigen Antworten, die mir geholfen haben das problem zu lösen.
Erstens, meine Fragen/problem:
- Ich möchte die Summe und die Anzahl, mit der bestimmte Spalten in eine mehrere join-Abfrage
- Ist es nicht möglich mit mehreren Verknüpfungen? Muss ich das nest
SELECT
Abfragen?
Hier ist ein SQL-dump meiner Datenbank mit Beispiel-Daten: http://pastie.org/private/vq7qkfer5mwyraudb5dh0a
Dies ist die Abfrage, die ich dachte, würde den trick tun:
SELECT firstname, lastname, sum(goal.goal), sum(assist.assist), sum(gw.gw), sum(win.win), count(played.idplayer) FROM player
LEFT JOIN goal USING (idplayer)
LEFT JOIN assist USING (idplayer)
LEFT JOIN gw USING (idplayer)
LEFT JOIN win USING (idplayer)
LEFT JOIN played USING (idplayer)
GROUP BY idplayer
Was ich möchte, diese zu produzieren ist eine Tabelle, wo die Spalten für die Ziel -, assist, gw, gewinnen und spielte eine Summe/Anzahl der jede Zeile in dieser Spalte, und zwar so: (mit mitgelieferten Beispiel-Daten)
+-----------+----------+------+--------+----+-----+--------+
| firstname | lastname | goal | assist | gw | win | played |
+-----------+----------+------+--------+----+-----+--------+
| Gandalf | The White| 10 | 6 | 1 | 1 | 2 |
| Frodo | Baggins | 16 | 2 | 1 | 2 | 2 |
| Bilbo | Baggins | 7 | 3 | 0 | 0 | 2 |
+-----------+----------+------+--------+----+-----+--------+
Also die Iteration der obigen Fragen wieder, ist das möglich, mit einer Abfrage und mehrere Verknüpfungen?
Wenn Sie Lösungen anbieten/Abfragen, bitte erklären Sie! Ich bin neu, um korrekte relationale Datenbanken und ich habe noch nie verwendet, schließt vor diesem Projekt. Ich würde auch schätzen, wenn Sie vermeiden, Aliase, sofern notwendig.
Habe ich die obige Abfrage ohne Summe und Gruppierung, und ich bekomme eine Menge von Zeilen für jede Spalte mache ich einen SELECT
auf, was ich vermute, dann multipliziert oder addiert, aber ich hatte den Eindruck, dass die Gruppierung und/oder tun sum(TABLE.COLUMN)
würde das lösen.
Andere Sache ist, dass, glaube ich, dabei eine SELECT DISTINCT
oder andere DISTINCT
Betrieb funktioniert nicht, da lassen sich einige ("Duplikat") ergibt.
PS. Wenn es darauf ankommt, meinem dev-Rechner ist ein WAMP-aber die Version wird auf ubuntu/apache/mysql/php.
- Sie haben verbrachte viel Zeit auf der DML, so erstellen Sie bitte ein sqlfiddle.
- Ich wusste nicht, über sqlfiddle, ic3be3rg geschaffen hat, die man in seiner Antwort, aber so dass ich nicht jetzt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zu verstehen, warum Sie sind nicht immer die Antworten, die Sie erwarten, werfen Sie einen Blick auf diese Abfrage:
Wie Sie sehen können, sind die Zeilen auf der linken Seite dupliziert werden, für die übereinstimmende Zeilen auf der rechten Seite. Diese Prozedur wiederholt sich bei jedem join. Hier ist die raw-Daten für Ihre Abfrage:
Diese wiederholten Werte sind dann für die SUMME Berechnungen. Die Summen berechnet werden müssen, bevor die Zeilen verbunden sind:
SQLFiddle