我正在创建一个简单的数据库,允许我跟踪斯诺克的结果,产生球员之间的直接结果。目前我有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/