Die einfache Arbeits Abfrage, listen die Anzahl der Lizenzen für jeden Lizenztyp:Warum erhalte ich falsche SUMME in meiner MYSQL-Abfrage, die zwei Tabellen verbindet?
Abfrage:
SELECT
COUNT(licenses.licenseID) AS total
FROM
licenses
GROUP BY
licenses.licensetypeID
Ergebnisse:
total
=====
389
14
2
5
3
1
1
Jetzt möchte ich den Gewinn aus den Lizenzen zusammenzufassen . Eine Tabelle transactions
enthält alle Transaktionen von PayPal. Ich benutze mc_gross
um zusammenzufassen. Manchmal gibt es Rückerstattungen, also mc_gross
ist negativ und es gibt mehr Transaktionen als Lizenzen.
In meiner aktuellen Datenbank wurden vier Lizenzen entfernt, da die Transaktion zurückerstattet wurde.
Mein Versuch:
SELECT
COUNT(licenses.licenseID) AS total,
SUM(transactions.mc_gross) AS gross
FROM
licenses
LEFT JOIN transactions ON licenses.txn_id = transactions.txn_id
GROUP BY
licenses.licensetypeID
Das Ergebnis:
393 9020.00
14 NULL
2 NULL
5 NULL
3 100.00
1 NULL
1 NULL
Beachten Sie, dass der erste Lizenztyp nun insgesamt vier mehr als die erste Abfrage. Daraus schließe ich, dass es die zusätzlichen Zeilen in der Transaktionstabelle hochzählt. Aber ich verstehe nicht, warum, weil ich dachte, ein LEFT JOIN
würde alle Zeilen für die linke Tabelle licenses
nehmen und mit dem verfügbaren transactions
verbinden.
Wenn ich mir die verschiedenen Verbindungen ansehe, kann ich keinen Sinn daraus ziehen, um mein gewünschtes Ergebnis zu erzielen.
Mache ich eine falsche Verbindung? Oder gruppiere ich nach dem falschen Wert?
Beachten Sie, dass ich alle Lizenztypen auflisten möchte - auch wenn sie zu null zählen.
(Lassen Sie mich wissen, wenn die ganze Tabellenstruktur erforderlich ist - ich habe es übersprungen die Frage zu lange zu vermeiden, dass ich hoffe, dass alle relevanten Informationen enthalten..)
try count (distinct license.licenseid) um das Zählen von Duplidaten zu vermeiden – Jason
@Jason: Das hat meine Zählung korrigiert. Aber jetzt sehe ich ein anderes Problem. Der Gesamtgewinn ist auch falsch.Aber das liegt daran, was @StilesCrisis erwähnt, es gibt einige Male 'txn_id', weil die Zahlung aussteht. Sieht so aus, als müsste ich diese herausfiltern. – thomthom