ゲーム統計を集計するための元のコードは非常に複雑です。この改訂されたアプローチにより、プレーヤーの名前とゲーム数 (プレイ、勝ち、負け) を取得する際のプロセスが簡素化されます。
PostgreSQL 9.4 以降 (FILTER
句を使用)
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>
FILTER
句は、集計関数に条件を効率的に適用し、可読性とパフォーマンスを向上させます。
PostgreSQL のすべてのバージョン (回避策)
FILTER
句がない古い PostgreSQL バージョンの場合、次の回避策で同じ結果が得られます。
<code class="language-sql">SELECT u.name, COUNT(CASE WHEN g.winner_id > 0 THEN 1 END) AS played, COUNT(CASE WHEN g.winner_id = u.id THEN 1 END) AS won, COUNT(CASE WHEN g.winner_id != u.id THEN 1 END) 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>
このメソッドは、CASE
ステートメントによる条件付き集計を使用して、目的のフィルタリングを実現します。 すべてのバージョンで機能しますが、明確さと効率性のために FILTER
句 (使用可能な場合) を使用することをお勧めします。
以上がPostgreSQL で個別のフィルターを使用してゲーム統計を効率的に集計するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。