MySQL: Effizientes Abrufen mehrerer Summenaggregationen mit bedingter Filterung
Bei der Arbeit mit Datenbanken müssen häufig mehrere Datensätze basierend auf unterschiedlichen Bedingungen abgerufen werden. Dies kann besonders komplex sein, wenn innerhalb einer einzigen Abfrage verschiedene Feldwerte verarbeitet werden.
Die Herausforderung:
Stellen Sie sich eine transactions
-Tabelle mit den Spalten id
, account_id
, budget_id
, points
und type
vor. Das Ziel besteht darin, in einer einzigen Abfrage die Summe von points
für jedes budget_id
abzurufen, wobei type
„Zuordnung“ entspricht, und separat die Summe von points
abzurufen, wobei type
„Problem“ entspricht.
Die Lösung: Nutzung der IF()
Funktion von MySQL
MySQLs IF()
-Funktion bietet eine übersichtliche Lösung. Wir können es innerhalb eines SUM()
-Aggregats in Kombination mit GROUP BY
verwenden, um das gewünschte Ergebnis zu erzielen:
<code class="language-sql">SELECT budget_id, SUM(IF(type = 'allocation', points, 0)) AS allocated, SUM(IF(type = 'issue', points, 0)) AS issued FROM transactions GROUP BY budget_id;</code>
Abfrageaufschlüsselung:
IF(type = 'allocation', points, 0)
: Dieser bedingte Ausdruck überprüft jede Zeile. Wenn type
„Zuordnung“ ist, wird der Wert points
zurückgegeben. andernfalls wird 0 zurückgegeben.IF(type = 'issue', points, 0)
: Dies spiegelt das oben Gesagte wider, jedoch für type
= 'issue'.SUM(...)
: Die Funktion SUM()
berechnet die Gesamtsumme für jeden bedingten Ausdruck und summiert die Punkte effektiv separat für die Typen „Zuweisung“ und „Problem“.GROUP BY budget_id
: Dadurch werden die Ergebnisse nach budget_id
gruppiert und die aggregierten Beträge für jedes Budget bereitgestellt.Anschauliches Beispiel:
Wenn die Abfrage für die transactions
-Tabelle ausgeführt wird, kann dies zu einer Ergebnismenge wie dieser führen:
<code>budget_id | allocated | issued ----------|-----------|-------- 434 | 200000 | 100 242 | 100000 | 5020 621 | 45000 | 3940</code>
Dies demonstriert den effizienten Abruf mehrerer aggregierter Datensätze mit unterschiedlicher bedingter Filterung innerhalb einer einzigen, optimierten MySQL-Abfrage.
Das obige ist der detaillierte Inhalt vonWie kann man mit bedingter Filterung in MySQL effizient mehrere Summenaggregationen abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!