首页 > 数据库 > mysql教程 > 如何在 PostgreSQL 中高效聚合玩家游戏统计数据?

如何在 PostgreSQL 中高效聚合玩家游戏统计数据?

Linda Hamilton
发布: 2025-01-22 17:23:11
原创
934 人浏览过

How Can I Efficiently Aggregate Player Game Statistics in PostgreSQL?

优化 PostgreSQL 查询以进行玩家游戏统计数据聚合

本文解决了在 PostgreSQL 中高效检索玩家游戏统计数据的问题,特别关注玩家姓名、玩过的游戏、赢的游戏和输的游戏。 挑战在于整合数据,玩家可以以 player_1player_2 的身份参与。 传统方法通常涉及多个重复查询。

简化的查询解决方案

对于 PostgreSQL 9.4 及更高版本:

利用 FILTER 子句获得简洁易读的代码:

<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>
登录后复制

对于所有 PostgreSQL 版本:

旧版本的兼容解决方案使用 ORNULL:

<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>
登录后复制

这些优化的查询有效地聚合玩家统计数据,避免冗余查询并提高性能。 选择合适的方法取决于您的 PostgreSQL 版本。

以上是如何在 PostgreSQL 中高效聚合玩家游戏统计数据?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板