SQL查询找到头对头匹配获胜

时间:2015-03-30 13:30:50

标签: mysql

我有以下MySQL数据库表,它描述了足球冠军赛中的比赛和结果:

Tables structure and example

这些行来自以下SQL查询:

    Select *
From RisultatiFantaAllenatori
Where Giornata = 10

 Select *
From Partite
Where Giornata = 10

我想计算一个球员与其他球员之间的头对头积分,对于所有冠军筹码。匹配将每9个比赛日重复一次(例如,Player1将在MatchDay#10和MatchDay#19上与Player2对战)。 这是我期望的事情:

enter image description here

为获得玩家的胜利,条件是Player.points> OtherPlayer.points。例如,在MatchDay10中,如果Player1获得4分并且玩家2获得1分,则Player1与Player2有1个头对头的胜利。 我希望尽可能清楚。所以我的问题是:是否有可能获得此范围的SQL查询?如果是,那是什么?提前感谢您的回复。

更新

属性名称为FantaAllenatore,而不是表RisultatiFantaAllenatori中的FantaAllenatori。在所有情况下,通过此查询,可以拥有冠军筹码的所有不同玩家:

    Select Cognome as FantaAllenatore
From FantaAllenatori

1 个答案:

答案 0 :(得分:1)

我相信以下内容可以解决问题:

SELECT
    t1.G1 as Player,
    t1.G2 as OtherPlayer,
    SUM(CASE WHEN t2.Punteggio > t3.Punteggio THEN 1 ELSE 0 END) as `Win for the Player`,
    SUM(CASE WHEN t2.Punteggio < t3.Punteggio THEN 1 ELSE 0 END) as `Win for the OtherPlayer`
FROM
    Partite t1
    LEFT OUTER JOIN RisultatiFantaAllenatori t2 ON
        t1.G1 = t2.FantaAllenatori AND
        t1.Giornata = t2.Giornata
    LEFT OUTER JOIN RisultatiFantaAllenatori t3 ON
        t1.G2 = t3.FantaAllenatori AND
        t1.Giornata = t3.Giornata
GROUP BY t1.G1, t1.G2

这里的神奇之处在于SUM(CASE ...)位,它比较每个玩家匹配的结果以确定谁。另一个重要的部分是加入你的第二张桌子两次,这样我们就可以得到每场比赛的每个球员的得分。