Heim > Datenbank > MySQL-Tutorial > Wie kann man mit bedingter Filterung in MySQL effizient mehrere Summenaggregationen abrufen?

Wie kann man mit bedingter Filterung in MySQL effizient mehrere Summenaggregationen abrufen?

Susan Sarandon
Freigeben: 2025-01-21 12:45:10
Original
833 Leute haben es durchsucht

How to Efficiently Retrieve Multiple Sum Aggregations with Conditional Filtering in MySQL?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage