我玩篮球游戏,它允许将其统计信息输出为数据库文件,因此可以从中计算出在游戏中未实现的统计信息。到目前为止,我可以很轻松地计算出我想要的统计数据,但是现在我遇到了一个问题:从一个赛季的比赛统计数据中计算出一个球员本赛季创造的双打和/或双打的数量。
双精度双精度和三重精度双精度的定义如下:
双双:
双打被定义为一种表现,其中玩家在游戏中累积五个统计类别中的两个统计的两位数总数(点,篮板,助攻,抢断和盖帽)。
三双:
三重双打被定义为一种表现,其中玩家在游戏中五个统计类别中的三个统计点(得分,篮板,助攻,抢断和盖帽)中累计两位数。
四重双(为清楚起见添加)
四重双打是指在游戏中,玩家在五个统计类别中的四个统计类别中(得分,篮板,助攻,抢断和盖帽)累计两位数的表现。
“ 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 |
到目前为止,我发现的唯一解决方案是如此糟糕,这使我感到恶心...; o)...看起来像这样:
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
……现在您读完这篇文章后可能还会呕吐(或大笑)。我什至没有写出获得所有双精度双精度组合所需的所有内容,并且省略了三精度双精度示例的case语句,因为这更加荒谬。
有一个更好的方法吗?我拥有的表结构或新的表结构(我可以编写脚本来转换表)。
我可以使用MySQL 5.5或PostgreSQL 9.2。
这是到SqlFiddle的链接,其中包含示例数据和我上面发布的糟糕的解决方案:http ://sqlfiddle.com/#!2/af6101/3
请注意,根据我所知,我对四重双注并不是很感兴趣,因为它们不会出现在我玩的游戏中,但是如果查询很容易扩展而又无需大量重写帐户,那将是一个加号。对于四双。