使用分布在多个记录上的数据执行条件计算

时间:2016-11-02 16:52:25

标签: sql amazon-redshift

我正在尝试计算使用不同“国家”的玩家的赢率。我得到的原始数据是每个玩家每场比赛,因此在1v1游戏中,我将在数据库中获得两个条目。一个将显示一个团队的“胜利”,另一个条目将记录对方团队的“损失”。问题是,有多个不同的“国家”,我希望能够计算国家与国家的胜率,而不是每个团队的总体广义赢率,如果这是有道理的。例如

观察下面的例子,我希望能够计算狗击猫,猫击老鼠和老鼠击狗的比率。

以下是我正在使用的数据的简化玩具模型

 date     match sessionid   team nation result
 1/1/2016   1   143138354   0    cats   loss
 1/1/2016   1   143146203   1    dogs   win
 1/1/2016   2   143134711   0    mice   win
 1/1/2016   2   143165199   1    dogs   loss
 1/1/2016   3   143183402   0    cats   win
 1/1/2016   3   143127251   1    mice   loss
 1/1/2016   4   143192433   0    cats   win
 1/1/2016   4   143129777   1    dogs   loss
 1/1/2016   5   143197254   0    mice   win
 1/1/2016   5   143147178   1    dogs   loss
 1/1/2016   6   143220297   0    cats   loss
 1/1/2016   6   143168454   1    mice   win
 1/1/2016   7   143169544   0    cats   win
 1/1/2016   7   143188824   0    cats   win
 1/1/2016   7   143178786   1    mice   loss
 1/1/2016   7   143212127   1    dogs   loss 

我考虑过像

这样的事情
SELECT 
match,
CASE WHEN nation='cats' AND result='loss' AND nation='dogs' AND result='win' THEN 'dogs_over_cats' END as result
FROM
table
GROUP BY
match

但当然这不起作用,因为国家不能同时同时是“猫”和“狗”。

我想要的是这样的东西

date,match,winning_nation,losing_nation

或者

日期,比赛,结果

其中result是一个字符串,表示谁击败谁('dogs_over_cats')或其他东西。

我不知道该怎么做。看起来应该很简单,但我无法弄清楚如何做到这一点。如何获取CASE语句同时考虑多个记录的字段值。这可能吗?我只需要使用滞后/导联功能吗?

由于 布拉德

1 个答案:

答案 0 :(得分:2)

你可以这样改变它:

select A1.match, A1.team as winner, A2.team as loser
from tableA A1
inner join tableA A2
on A1.match = A2.match

where A1.result = 'win'
and A2.result = 'loss'