Heim > Datenbank > MySQL-Tutorial > Wie kann ich Spielstatistiken mit unterschiedlichen Filtern in PostgreSQL effizient aggregieren?

Wie kann ich Spielstatistiken mit unterschiedlichen Filtern in PostgreSQL effizient aggregieren?

DDD
Freigeben: 2025-01-22 17:32:41
Original
607 Leute haben es durchsucht

How Can I Efficiently Aggregate Game Statistics with Distinct Filters in PostgreSQL?

Optimierung der Aggregation von Spielstatistiken in PostgreSQL

Der ursprüngliche Code zur Aggregation von Spielstatistiken ist zu komplex. Dieser überarbeitete Ansatz vereinfacht den Prozess beim Abrufen von Spielernamen und der Anzahl ihrer Spiele (gespielt, gewonnen und verloren).

PostgreSQL 9.4 und höher (unter Verwendung der FILTER-Klausel)

PostgreSQL 9.4 und spätere Versionen bieten eine elegante Lösung mit der FILTER-Klausel:

<code class="language-sql">SELECT u.name,
       COUNT(*) FILTER (WHERE g.winner_id > 0) AS played,
       COUNT(*) FILTER (WHERE g.winner_id = u.id) AS won,
       COUNT(*) FILTER (WHERE g.winner_id != u.id) AS lost
FROM games g
JOIN users u ON u.id IN (g.player_1_id, g.player_2_id)
GROUP BY u.name;</code>
Nach dem Login kopieren

Die FILTER-Klausel wendet Bedingungen effizient auf die Aggregatfunktionen an und verbessert so die Lesbarkeit und Leistung.

PostgreSQL Alle Versionen (Problemumgehung)

Für ältere PostgreSQL-Versionen, denen die FILTER-Klausel fehlt, erzielt diese Problemumgehung das gleiche Ergebnis:

<code class="language-sql">SELECT u.name,
       COUNT(CASE WHEN g.winner_id > 0 THEN 1 END) AS played,
       COUNT(CASE WHEN g.winner_id = u.id THEN 1 END) AS won,
       COUNT(CASE WHEN g.winner_id != u.id THEN 1 END) AS lost
FROM games g
JOIN users u ON u.id IN (g.player_1_id, g.player_2_id)
GROUP BY u.name;</code>
Nach dem Login kopieren

Diese Methode verwendet bedingte Aggregation mit CASE-Anweisungen, um die gewünschte Filterung zu erreichen. Obwohl sie in allen Versionen funktionsfähig ist, ist die FILTER-Klausel (sofern verfügbar) aus Gründen der Klarheit und Effizienz die bevorzugte Methode.

Das obige ist der detaillierte Inhalt vonWie kann ich Spielstatistiken mit unterschiedlichen Filtern in PostgreSQL effizient aggregieren?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage