我有以下MySQL数据库表,它描述了足球冠军赛中的比赛和结果:
这些行来自以下SQL查询:
Select *
From RisultatiFantaAllenatori
Where Giornata = 10
和
Select *
From Partite
Where Giornata = 10
我想计算一个球员与其他球员之间的头对头积分,对于所有冠军筹码。匹配将每9个比赛日重复一次(例如,Player1将在MatchDay#10和MatchDay#19上与Player2对战)。 这是我期望的事情:
为获得玩家的胜利,条件是Player.points> OtherPlayer.points。例如,在MatchDay10中,如果Player1获得4分并且玩家2获得1分,则Player1与Player2有1个头对头的胜利。 我希望尽可能清楚。所以我的问题是:是否有可能获得此范围的SQL查询?如果是,那是什么?提前感谢您的回复。
更新
属性名称为FantaAllenatore,而不是表RisultatiFantaAllenatori中的FantaAllenatori。在所有情况下,通过此查询,可以拥有冠军筹码的所有不同玩家:
Select Cognome as FantaAllenatore
From FantaAllenatori
答案 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 ...)位,它比较每个玩家匹配的结果以确定谁。另一个重要的部分是加入你的第二张桌子两次,这样我们就可以得到每场比赛的每个球员的得分。