出于某种原因,我无法通过此查询返回我正在寻找的结果。在概述了这种情况之后我会解释一下......
有两个表格,一个用于玩家,另一个用于匹配。在每场比赛中,玩家根据他们所处的位置获得评级(浮动/小数)。该评级可以在一个位置改善,但在其他位置可以不同/更好。因此,我希望能够看到 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
答案 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