Maison >base de données >tutoriel mysql >Comment puis-je agréger efficacement les statistiques de jeu des joueurs dans PostgreSQL ?

Comment puis-je agréger efficacement les statistiques de jeu des joueurs dans PostgreSQL ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-22 17:23:11894parcourir

How Can I Efficiently Aggregate Player Game Statistics in PostgreSQL?

Optimisation des requêtes PostgreSQL pour l'agrégation des statistiques de jeu des joueurs

Cet article traite de la récupération efficace des statistiques de jeu des joueurs dans PostgreSQL, en se concentrant spécifiquement sur le nom du joueur, les parties jouées, les parties gagnées et les parties perdues. Le défi réside dans la consolidation des données auxquelles les joueurs peuvent participer en tant que player_1 ou player_2. Les approches traditionnelles impliquent souvent des requêtes multiples et répétitives.

Solutions de requêtes rationalisées

Pour PostgreSQL 9.4 et versions ultérieures :

Exploitez la clause FILTER pour un code concis et lisible :

<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>

Pour toutes les versions de PostgreSQL :

Une solution compatible pour les anciennes versions utilise OR et 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>

Ces requêtes optimisées regroupent efficacement les statistiques des joueurs, évitant les requêtes redondantes et améliorant les performances. Le choix de la méthode appropriée dépend de votre version de PostgreSQL.

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!

Déclaration:
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