Registrieren Ergebnisse von zwei select-Anweisungen
-
06-07-2019 - |
Frage
Ich habe eine Tabelle, die als ein Transaktionsprotokoll:
Date Action Qty
11-23 ADD 1
11-23 REMOVE 2
11-23 ADD 3
würde ich eine Abfrage wie alle ADDs und all die Beseitigt separat für ein bestimmtes Datum zu aggregieren.
Jeder dieser select-Anweisungen funktionieren, aber sie können nicht miteinander verbunden werden:
select date, sum(qty) as Added from table where action='Add' and date='11-23'
natural join
select date, sum(qty) as Removed from table where action='Remove' and date='11-23'
Kann ich die Ergebnisse der einzelnen select-Anweisung an einen Tisch und dann diejenigen beitreten? Gibt es eine Möglichkeit, dies alles zusammen zu vermeiden?
Thanks- Jonathan
Lösung
Hier finden Sie aktuelle UNION Syntax, wenn Sie wirklich die Ergebnismengen von mehreren Abfragen in einem hinzufügen möchten:
http://dev.mysql.com/doc/refman /5.0/en/union.html
jedoch in diesem Fall einen Blick auf GROUP BY
könntest Du Gruppe Date, Action
deshalb in einem Datensatz pro Tag resultierenden pro Aktion, mit SUM()
in der Lage, Ihnen die Menge zu geben.
Zum Beispiel:
select
date,
action,
sum(qty) AS Quantity
from
table
group by
date, action
Wird ergeben:
11-23 | ADD | 10
11-23 | REMOVE | 5
11-24 | ADD | 4
11-24 | REMOVE | 3
Andere Tipps
Es würde helfen, wenn Sie zeigt, welche Ausgabe Sie eigentlich wollen. Von Ihrem „als Added“ und „als entfernt“ Ich vermute, dass Sie nicht wollen eine Union, aber vielleicht etwas wie folgt aus:
select
date,
sum(if(action='ADD',qty,0)) as Added,
sum(if(action='REMOVE',qty,0)) as Removed
from `table`
where date='11-23';
(mit einem group by date
, wenn Sie mehrere Termine auswählen.)