Ich habe eine Tabelle, die Transaktionen aufzeichnet. Ich möchte alle IDs auszuwählen, die genau 4 Transaktionen Wert 2000, aber dann diejenigen auszuschließen, die eine einzelne Transaktion von 2500.Mysql durch Bedingung auswählen, wenn keine andere Bedingung erfüllt ist
SELECT t.tuserid, COUNT(*) AS CNT
FROM transactions t
WHERE t.amt = 2000
GROUP BY t.tuserid
HAVING CNT = 4;
Dieser Teil einfach genug ist, aber ich bin mir nicht sicher, wie man Schließen Sie effizient jeden aus, der eine Transaktion mit einem t.amt = 2500 hat. Wäre eine einfache Unterabfrage für die where-Klausel am effizientesten?
SELECT t.tuserid, COUNT(*) AS CNT
FROM transactions t
WHERE t.amt = 2000
AND t.tuserid NOT IN (SELECT x.tuserid FROM transactions x WHERE x.amt=2500)
GROUP BY t.tuserid
HAVING CNT = 4;
Die Transaktionen Tabelle ist groß und ich bin mir nicht sicher, dass eine Unterabfrage der effizienteste Weg ist, diesen Prozess zu laufen.
Danke. Die relevanten Spalten sind indiziert (ich habe hier einige Dinge weggelassen) – Steve