2016-11-02 3 views
0

Я пытаюсь рассчитать коэффициенты выигрыша для игроков, использующих разные «нации». Исходные данные, которые я получаю, зависят от каждого игрока за игру, поэтому в игре 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 

Но, конечно, не работает, потому что страна может» одновременно быть «кошками» и «собаками».

То, что я хочу что-то вроде этого

дата, матч, winning_nation, losing_nation

или альтернативно

дата матча, результат

, где результатом будет строка, указывающая обыгравший кто ('dogs_over_cats') или что-то в этом роде.

Я понятия не имею, как это сделать. Похоже, это должно быть довольно просто, но я не могу понять, как это сделать. Как получить оператор CASE для одновременного рассмотрения значений полей по нескольким записям. Возможно ли это? Должен ли я просто использовать функции задержки/свинца?

Благодаря Брэд

ответ

2

Вы можете trasform это следующим образом:

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' 
+0

Благодаря Джон, это здорово. Это будет работать отлично. Спасибо за этот трюк. –