Heim > Datenbank > MySQL-Tutorial > Wie rufe ich zwei unterschiedliche Datensätze mit bedingter Aggregation in einer einzigen SQL-Abfrage ab?

Wie rufe ich zwei unterschiedliche Datensätze mit bedingter Aggregation in einer einzigen SQL-Abfrage ab?

Mary-Kate Olsen
Freigeben: 2025-01-21 12:36:10
Original
455 Leute haben es durchsucht

How to Retrieve Two Distinct Data Sets with Conditional Aggregation in a Single SQL Query?

Effizientes Abrufen zweier separater Datensätze mit einer einzigen SQL-Abfrage

Dieses Beispiel zeigt, wie man zwei unterschiedliche Datensätze aus einer einzigen SQL-Abfrage abruft und so die Notwendigkeit mehrerer Abfragen vermeidet. Zur Veranschaulichung verwenden wir eine transactions-Tabelle (die die Spalten id, account_id, budget_id, points und type enthält). Das Ziel besteht darin, Folgendes zu erreichen:

  1. Die Gesamtsumme points für jedes budget_id, wobei type für „Zuteilung“ steht.
  2. Die Gesamtsumme points für jedes budget_id, wobei type „Problem“ ist.

Die Lösung: Bedingte Aggregation

Eine einzelne SQL-Abfrage kann dies mithilfe der bedingten Aggregation erreichen:

<code class="language-sql">SELECT 
    budget_id,
    SUM(CASE WHEN type = 'allocation' THEN points ELSE 0 END) AS allocated_points,
    SUM(CASE WHEN type = 'issue' THEN points ELSE 0 END) AS issued_points
FROM 
    transactions
GROUP BY 
    budget_id;</code>
Nach dem Login kopieren

Diese Abfrage verwendet die CASE-Anweisung (oder IF in einigen Datenbanksystemen), um die points bedingt zu summieren. Wenn type „Zuordnung“ ist, werden die points zu allocated_points hinzugefügt; andernfalls wird 0 hinzugefügt. Die gleiche Logik gilt für issued_points. Die GROUP BY-Klausel stellt sicher, dass die Summen für jedes einzelne budget_id.

berechnet werden

Erwartete Ausgabe:

Die Abfrage gibt eine Ergebnismenge ähnlich dieser zurück:

<code>budget_id | allocated_points | issued_points
----------|-------------------|---------------
    434   |       200000      |     100
    242   |       100000      |     5020
    621   |        45000      |     3940</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie rufe ich zwei unterschiedliche Datensätze mit bedingter Aggregation in einer einzigen SQL-Abfrage ab?. 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