我正在尝试计算使用不同“国家”的玩家的赢率。我得到的原始数据是每个玩家每场比赛,因此在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语句同时考虑多个记录的字段值。这可能吗?我只需要使用滞后/导联功能吗?
由于 布拉德
答案 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'