SQL查询计算具有最高匹配胜利数的人

时间:2015-12-13 22:07:19

标签: mysql sql database

我正在创建一个简单的数据库,这将允许我跟踪斯诺克结果,在玩家之间产生头对头的结果。目前我有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

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

3 个答案:

答案 0 :(得分:1)

我同意使用窗口函数将是最好的方法,如果可用(例如SQL Server) 这种方式可能采用直接的SQL方法(假设在"夹具中获胜最多的那个"是匹配赢家)

glTexImage2D()

或者如果可以省略fixtureId,并且只为这两个玩家过滤类似这样的玩家。上面给出的数据应该带来样本结果。

    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

答案 1 :(得分:0)

也许这对你有用:

select playerid, count(*) as matcheswon
from result as r1
where frameswon = 
 (
   select max(frameswon)
   from result as r2
   where r2.fixtureid = r1.fixtureid
   )
group by playerid

这里有一个小提琴:http://sqlfiddle.com/#!9/60821/2

答案 2 :(得分:0)

这是您可以尝试的替代方案。

SELECT r.PlayerID, COUNT(r.PlayerID)
FROM (
    SELECT FixtureID, MAX(FramesWon) AS FramesWon
    FROM `result`
    GROUP BY FixtureID    
) win
INNER JOIN result r ON win.FixtureID = r.FixtureID AND win.FramesWon = r.FramesWon
GROUP By r.PlayerID