【发布时间】:2013-08-26 15:46:24
【问题描述】:
由于某种原因,我无法让此查询返回我正在寻找的结果。我会在概述情况后解释...
有两张桌子,一张用于玩家,一张用于比赛。在每场比赛中,球员都会根据他们所处的位置获得评分(浮动/小数)。这个评分可能会在一个位置上有所提高,但在其他位置上可能会有所不同/更好。因此,我希望能够看到 MAX(rating) 和获得最大值的 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、位置、播放时间、评分、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、状态 (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
【问题讨论】:
-
一些示例数据和所需的输出会有所帮助,另外,您使用的是什么数据库(MySQL、SQL Server 2008 等)?
-
它的 mysql,没有其他东西可以通过子查询在组中选择 pos。而 pos 的存在是获得错误值的主要原因。
-
见上文进行编辑,希望对您有所帮助
标签: sql group-by subquery max inner-join