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:
points
für jedes budget_id
, wobei type
für „Zuteilung“ steht.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>
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
.
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>
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!