出于某种原因,我无法让此查询返回我正在寻找的结果。我会在概述情况后解释...
有两张桌子,一张给玩家,一张给比赛。在每场比赛中,球员都会根据他们所处的位置获得评分(浮动/小数)。这个评分可能会在一个位置上有所提高,但在其他位置上可能会有所不同/更好。因此,我希望能够看到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