ホームページ >データベース >mysql チュートリアル >PostgreSQL でプレイヤーのゲーム統計を効率的に集約するにはどうすればよいですか?

PostgreSQL でプレイヤーのゲーム統計を効率的に集約するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-22 17:23:11894ブラウズ

How Can I Efficiently Aggregate Player Game Statistics in PostgreSQL?

プレイヤーのゲーム統計集計のための 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 バージョンの場合:

古いバージョンと互換性のあるソリューションは、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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。