首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于计算谁的比赛胜利数最高的SQL查询

用于计算谁的比赛胜利数最高的SQL查询
EN

Stack Overflow用户
提问于 2015-12-14 06:07:19
回答 3查看 668关注 0票数 1

我正在创建一个简单的数据库,它将允许我跟踪斯诺克的结果,在球员之间产生头对头的结果。目前我有3个表:(球员,设备,结果)

代码语言:javascript
复制
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赢得了第二场比赛。在这种情况下,预期输出应为:

代码语言:javascript
复制
PlayerID    MatchesWon
1           1
3           1
EN

回答 3

Stack Overflow用户

发布于 2015-12-14 06:37:50

我同意使用窗口函数是最好的方法(例如SQL Server ),使用直接的SQL方法是可能的(假设在“装备”中获胜最多的是比赛胜利者)。

代码语言:javascript
复制
    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,只过滤两个播放器,就像这样。有了上面给出的数据,应该可以得到样本结果。

代码语言:javascript
复制
    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)
票数 1
EN

Stack Overflow用户

发布于 2015-12-14 06:57:59

也许这对你来说是可行的:

代码语言:javascript
复制
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

票数 0
EN

Stack Overflow用户

发布于 2015-12-14 07:03:15

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

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34256976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档