ホームページ >データベース >mysql チュートリアル >PostgreSQL でプレイヤーのゲーム統計を効率的に集約するにはどうすればよいですか?
この記事では、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 中国語 Web サイトの他の関連記事を参照してください。