Heim > Datenbank > MySQL-Tutorial > Wie kann ich die Aggregation von Spielstatistiken mit unterschiedlichen Filtern in PostgreSQL vereinfachen?

Wie kann ich die Aggregation von Spielstatistiken mit unterschiedlichen Filtern in PostgreSQL vereinfachen?

Mary-Kate Olsen
Freigeben: 2025-01-22 17:16:10
Original
383 Leute haben es durchsucht

How Can I Simplify Aggregating Game Statistics with Distinct Filters in PostgreSQL?

Spalten mithilfe zusätzlicher (verschiedener) Filter aggregieren

Der folgende Code zählt die Anzahl der von jedem Spieler gespielten, gewonnenen und verlorenen Spiele. Seine Länge und Komplexität stellen jedoch Herausforderungen dar. Wie können wir diese Abfrage vereinfachen?

PostgreSQL 9.4 oder höher

Verwenden Sie die FILTER-Klausel, um Aggregationen basierend auf einem booleschen Ausdruck zu filtern:

<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

Jede PostgreSQL-Version

Emphasis PostgreSQL 9.4 führte die FILTER-Klausel ein. Für ältere Versionen gibt es einen Workaround:

<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

Hinweis: Die Lösung für ältere Versionen von PostgreSQL verwendet die CASE-Anweisung anstelle der FILTER-Klausel, um den gleichen Effekt zu erzielen. Beide Methoden berechnen die Spielstatistiken eines Spielers genau, aber die FILTER-Klausel hat den Vorteil, dass sie besser lesbar und wartbar ist.

Das obige ist der detaillierte Inhalt vonWie kann ich die Aggregation von Spielstatistiken mit unterschiedlichen Filtern in PostgreSQL vereinfachen?. 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