統計情報をデータベースファイルとして出力できるバスケットボールゲームをプレイしているので、ゲームに実装されていない統計情報を計算できます。これまでのところ、必要な統計を計算するのに何の問題もありませんでしたが、今では問題に直面しています:プレーヤーがシーズン中に作ったダブルダブルまたはトリプルダブルの数をゲーム統計からカウントすることです。
double doubleとtriple doubleの定義は次のとおりです。
ダブルダブル:
ダブルダブルとは、プレイヤーがゲーム内で5つの統計カテゴリー(ポイント、リバウンド、アシスト、スチール、ブロックショット)のうち2つに合計2桁の数字を累積するパフォーマンスとして定義されます。
トリプルダブル:
トリプルダブルとは、プレイヤーがゲーム内で5つの統計カテゴリー(ポイント、リバウンド、アシスト、スチール、ブロックショット)のうち3つに合計2桁の数字を累積するパフォーマンスとして定義されます。
Quadruple-double(明確にするために追加)
4倍ダブルは、プレーヤーがゲームで5つの統計カテゴリ(ポイント、リバウンド、アシスト、スチール、ブロックショット)の4つに合計2桁の数字を蓄積するパフォーマンスとして定義されます。
「PlayerGameStats」テーブルには、プレーヤーがプレイする各ゲームの統計が格納され、次のようになります。
CREATE TABLE PlayerGameStats AS SELECT * FROM ( VALUES
( 1, 1, 1, 'Nuggets', 'Cavaliers', 6, 8, 2, 2, 0 ),
( 2, 1, 2, 'Nuggets', 'Clippers', 15, 7, 0, 1, 3 ),
( 3, 1, 6, 'Nuggets', 'Trailblazers', 11, 11, 1, 2, 1 ),
( 4, 1, 10, 'Nuggets', 'Mavericks', 8, 10, 2, 2, 12 ),
( 5, 1, 11, 'Nuggets', 'Knicks', 23, 12, 1, 0, 0 ),
( 6, 1, 12, 'Nuggets', 'Jazz', 8, 8, 11, 1, 0 ),
( 7, 1, 13, 'Nuggets', 'Suns', 7, 11, 2, 2, 1 ),
( 8, 1, 14, 'Nuggets', 'Kings', 10, 15, 0, 3, 1 ),
( 9, 1, 15, 'Nuggets', 'Kings', 9, 7, 5, 0, 4 ),
(10, 1, 17, 'Nuggets', 'Thunder', 13, 10, 10, 1, 0 )
) AS t(id,player_id,seasonday,team,opponent,points,rebounds,assists,steals,blocks);
達成したい出力は次のようになります。
| player_id | team | doubleDoubles | tripleDoubles |
|-----------|---------|---------------|---------------|
| 1 | Nuggets | 4 | 1 |
私がこれまでに見つけた唯一の解決策は、ひどいことです。
SELECT
player_id,
team,
SUM(CASE WHEN(points >= 10 AND rebounds >= 10) OR
(points >= 10 AND assists >= 10) OR
(points >= 10 AND steals >= 10)
THEN 1
ELSE 0
END) AS doubleDoubles
FROM PlayerGameStats
GROUP BY player_id
...そして今、あなたはおそらくこれを読んだ後、あなたもおそらく吐き出している(または激しく笑っている)。すべてのdouble doubleの組み合わせを取得するために必要なものをすべて書き出さず、トリプルdoubleのcaseステートメントを省略しました。
これを行うためのより良い方法はありますか?私が持っているテーブル構造または新しいテーブル構造のいずれかを使用して(テーブルを変換するスクリプトを作成できます)。
MySQL 5.5またはPostgreSQL 9.2を使用できます。
ここに、サンプルデータと上に投稿した私のひどいソリューションを含むSqlFiddleへのリンクがあります:http ://sqlfiddle.com/#!2/af6101/3
私が知っている限り、私はプレイしているゲームでは発生しないので、私は4倍ダブル(上記参照)にはあまり興味がないことに注意してください。 4倍ダブルの場合。