我正在创建一个简单的数据库,允许我跟踪斯诺克的结果,产生球员之间的直接结果。目前我有3张桌子:(球员,赛程,结果)

PlayerID    PlayerName
1           Michael Abraham
2           Ben Mullen
3           Mark Crozier

FixtureID   Date                 TableNo    Group
1           07/12/2015 19:00:00  12         0
2           08/12/2015 12:00:00  9          0

ResultID    FixtureID   PlayerID    FramesWon
1           1           1           3
2           1           3           1
3           2           1           2
4           2           3           5

在结果表中可以看到,player1已经和player3打了两次,player1以3比1赢了第一场比赛,player3以5比2赢了第二场比赛。我想要一个查询,返回两个玩家之间赢得的比赛总数。在这种情况下,预期输出应为:
PlayerID    MatchesWon
1           1
3           1

任何帮助都将不胜感激-我甚至不确定这是否可以通过查询实现

最佳答案

我同意如果可用的话,使用窗口功能是最好的方法(例如SQL Server)
用这种方式直接使用sql方法可能是可行的(假设在“fixture”中获胜最多的是比赛赢家)

    SELECT PlayerId, FixtureID, Count(*) As MatchesWon
    FROM Result r
    WHERE r.Frameswon = (SELECT MAX(frameswon) FROM Result r2
                  WHERE
                  r.FixtureId = r2.FixtureId)
    GROUP BY PlayerID,FixtureId

或者如果可以去掉fixtureid,只过滤2个玩家,就像这个一样。上面给出的数据应该会带来样本结果。
    SELECT PlayerId, MatchesWon
    FROM
    (
    SELECT FixtureID,PlayerId, Count(*) As MatchesWon
    FROM Result r
    WHERE r.Frameswon = (SELECT max(frameswon) FROM Result r2
                  WHERE
                  r.FixtureId = r2.FixtureId)

   GROUP BY FixtureId,PlayerID
   ) s
   WHERE
   PlayerID IN (1,3)

关于mysql - SQL查询来统计谁拥有最高的比赛胜利,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34256976/

10-10 18:00