Maison > base de données > tutoriel mysql > Comment puis-je simplifier l'agrégation des statistiques de jeu avec des filtres distincts dans PostgreSQL ?

Comment puis-je simplifier l'agrégation des statistiques de jeu avec des filtres distincts dans PostgreSQL ?

Mary-Kate Olsen
Libérer: 2025-01-22 17:16:10
original
387 Les gens l'ont consulté

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

Agrégation de colonnes à l'aide de filtres supplémentaires (différents)

Le code suivant compte le nombre de parties jouées, gagnées et perdues par chaque joueur. Cependant, sa longueur et sa complexité posent des problèmes. Comment pouvons-nous simplifier cette requête ?

PostgreSQL 9.4 ou supérieur

Utilisez la clause FILTER pour filtrer les agrégations en fonction d'une expression booléenne :

<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>
Copier après la connexion

Toute version de PostgreSQL

Emphase PostgreSQL 9.4 a introduit la clause FILTER. Pour les anciennes versions, une solution de contournement existe :

<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>
Copier après la connexion

Remarque : La solution pour les anciennes versions de PostgreSQL utilise l'instruction CASE au lieu de la clause FILTER pour obtenir le même effet. Les deux méthodes calculent avec précision les statistiques de jeu d'un joueur, mais la clause FILTER a l'avantage d'être plus lisible et maintenable.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal