使用INNER JOIN和MAX(),返回与MAX相同的行

时间:2013-08-26 15:46:24

标签: sql group-by subquery max inner-join

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

有两个表格,一个用于玩家,另一个用于匹配。在每场比赛中,玩家根据他们所处的位置获得评级(浮动/小数)。该评级可以在一个位置改善,但在其他位置可以不同/更好。因此,我希望能够看到 MAX(评级) pos 获得最大值,以及玩家详细信息

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

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

1 个答案:

答案 0 :(得分: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