2015-09-27 87 views
0

我有一個Players表和MatchUps表。 MatchUps表具有winner_id列和loser_id列。我可以根據一個查詢中的勝率獲得排名/排名嗎?如果我可以爲每個玩家返回這樣的東西,那將是非常棒的。獲得積分榜/排名根據比賽中的勝利百分比表

PlayerName - winCount - lossCount - winPercentage 

我是一個SQL輕量級,所以我試過的東西還沒有接近。我基本上已經能夠爲每位球員贏得勝利,就是這樣。

下面是一個例子球員表:

+----+-------------------------------------+ 
| id | name        | 
+----+-------------------------------------+ 
| 1 | Iron Man       | 
| 2 | Gaurdians Of The Galaxy    | 
| 3 | Batman Begins      | 
| 4 | X-Men        | 
| 5 | Captain America: The First Avenger | 
| 6 | Superman II       | 
| 7 | Captain America: The Winter Soldier | 
| 8 | X2: X-Men United     | 
| 9 | X-Men: First Class     | 
| 10 | Superman: The Movie     | 
| 11 | Batman        | 
| 12 | The Avengers      | 
| 13 | The Incredibles      | 
| 14 | The Dark Knight      | 
+----+-------------------------------------+ 

下面是一個示例的巔峯對決表:

+----+-----------+----------+ 
| id | winner_id | loser_id | 
+----+-----------+----------+ 
| 1 |   5 |  6 | 
| 2 |   2 |  9 | 
| 3 |   1 |  5 | 
| 4 |   1 |  6 | 
| 5 |   4 |  13 | 
| 6 |   1 |  13 | 
| 7 |   1 |  2 | 
| 8 |   1 |  9 | 
| 9 |   3 |  8 | 
| 10 |   2 |  8 | 
| 11 |   1 |  8 | 
| 12 |   1 |  12 | 
| 13 |   2 |  10 | 
| 14 |   1 |  10 | 
| 15 |   2 |  4 | 
| 16 |   1 |  4 | 
| 17 |   2 |  13 | 
| 18 |   3 |  11 | 
| 19 |   2 |  3 | 
| 20 |   1 |  3 | 
+----+-----------+----------+ 
+0

你能提供的表結構?並在可能的情況下采樣數據 – RubahMalam

回答

1

這是做到這一點的一種方法:

小提琴: http://sqlfiddle.com/#!9/731d6/1/0

select p.name as playername, 
     x.wincount, 
     x.losscount, 
     case when x.wincount = 0 then 0 
      else x.wincount/x.total_games 
      end as winpercentage 
from ( select player_id, 
        sum(case when outcome = 'W' then 1 else 0 end) as wincount, 
        sum(case when outcome = 'L' then 1 else 0 end) as losscount, 
        count(*) as total_games 
      from (
         select winner_id as player_id, 
           'W' as outcome 
         from matchups 
         union all 
         select loser_id, 
           'L' 
         from matchups 
        ) x 
      group by player_id 
     ) x 
    join players p 
    on x.player_id = p.id 
0

請試試這個:

select id,name, 
ifnull(t1.win_count,0) as win_count, 
ifnull(t2.loss_count,0) as loss_count, 
concat(round((ifnull(t1.win_count,0)/(ifnull(t2.loss_count,0)+ifnull(t1.win_count,0))) * 100,0),' %') as win_percentage 
from player as tbl 
left join (
select winner_id,count(*) as win_count from matchups group by winner_id 
) as t1 on t1.winner_id = tbl.player_id 
left join (
select loser_id,count(*) as loss_count from matchups group by loser_id 
) as t2 on t2.loser_id = tbl.player_id