Dieser Artikel befasst sich mit dem effizienten Abrufen von Spielerspielstatistiken in PostgreSQL und konzentriert sich dabei insbesondere auf Spielernamen, gespielte, gewonnene und verlorene Spiele. Die Herausforderung besteht darin, Daten zu konsolidieren, bei denen Spieler entweder als player_1
oder player_2
teilnehmen können. Herkömmliche Ansätze beinhalten oft mehrere, sich wiederholende Abfragen.
Für PostgreSQL 9.4 und höher:
Nutzen Sie die FILTER
-Klausel für prägnanten und lesbaren Code:
<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>
Für alle PostgreSQL-Versionen:
Eine kompatible Lösung für ältere Versionen nutzt OR
und NULL
:
<code class="language-sql">SELECT u.name, COUNT(g.winner_id > 0 OR NULL) AS played, COUNT(g.winner_id = u.id OR NULL) AS won, COUNT(g.winner_id <> u.id OR NULL) 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>
Diese optimierten Abfragen aggregieren effektiv Spielerstatistiken, vermeiden redundante Abfragen und verbessern die Leistung. Die Wahl der geeigneten Methode hängt von Ihrer PostgreSQL-Version ab.
Das obige ist der detaillierte Inhalt vonWie kann ich Spielerspielstatistiken in PostgreSQL effizient aggregieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!