我正在创建一个简单的数据库,这将允许我跟踪斯诺克结果,在玩家之间产生头对头的结果。目前我有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
任何帮助都将不胜感激 - 我甚至不确定这是否可以通过查询实现
答案 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