Maison >base de données >tutoriel mysql >Comment puis-je agréger efficacement les statistiques de jeu des joueurs dans PostgreSQL ?
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.
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!