0

出于某种原因,我无法让此查询返回我正在寻找的结果。我会在概述情况后解释...

有两张桌子,一张给玩家,一张给比赛。在每场比赛中,球员都会根据他们所处的位置获得评分(浮动/小数)。这个评分可能会在一个位置上有所提高,但在其他位置上可能会有所不同/更好。因此,我希望能够看到MAX(rating)和获得最大值的位置以及玩家的详细信息

所以,我的想法是做以下事情:

SELECT * 
FROM   players 
       INNER JOIN(SELECT pid, 
                         Max(rating) AS a, 
                         pos 
                  FROM   matches 
                  GROUP  BY pid) b 
               ON b.pid = players.ypid 
WHERE  players.ytid = '2010591' 
   AND players.status = '1' 
ORDER  BY ypromdate ASC, 
          ydob ASC 

这确实会返回所有玩家的详细信息和最高评分,但是如果玩家参加了多场比赛(因此是 GROUP BY),则返回pos的第一条记录。例如,如果 player1 作为后卫获得 5 分,然后作为前锋获得 6 分,则此查询将返回 6 后卫

如果需要更多信息,我很乐意提供!

提前谢谢..感觉好像我把查询带错了..

编辑以帮助回答发布的问题:

软件:MySQL

Apache/2.2.15 (CentOS)

数据库客户端版本:libmysql - 5.1.69

样本数据,减少以节省时间:

匹配表: id, matchid, matchdate, position, timeplayed, rating, pid
(149, 77221704, '2013-08-12 15:00:00', 100, 90, 1.5, 143569504),

(150, 77221705, '2013-09-12 15:00:00', 103, 90, 3, 143569504)

玩家表:pid, ytid, status (143569504, 2010591, 1)

预期结果:

pid, ytid, status, pos, Max(rating) 143569504, 2010591, 1, 103, 3

目前的结果:

pid, ytid, status, pos, Max(rating) 143569504, 2010591, 1, 100, 3

4

1 回答 1

1

像这样的东西应该工作

select yourfields (not all of them)
from players p join matches m on m.pid = p.pid
join (select pid, max(rating) maxrating
from matches
group by pid) temp  on p.pid = temp.pid and rating = maxrating
etc
于 2013-08-26T16:05:40.520 回答