首頁 >資料庫 >mysql教程 >如何在 PostgreSQL 中有效聚合玩家遊戲統計資料?

如何在 PostgreSQL 中有效聚合玩家遊戲統計資料?

Linda Hamilton
Linda Hamilton原創
2025-01-22 17:23:11976瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn