本文解決了在 PostgreSQL 中高效檢索玩家遊戲統計數據的問題,特別關注玩家姓名、玩過的遊戲、贏的遊戲和輸的遊戲。 挑戰在於整合數據,玩家可以以 player_1
或 player_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 版本:
舊版的相容解決方案使用 OR
和 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>
這些最佳化的查詢有效地聚合玩家統計數據,避免冗餘查詢並提高效能。 選擇合適的方法取決於您的 PostgreSQL 版本。
以上是如何在 PostgreSQL 中有效聚合玩家遊戲統計資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!