我会建议,以避免由MySQL在可能情况下提供的隐含的分组,我的意思是,你的查询已允许您选择ID
,Time
和seconds
即使它们不包含在聚合函数或group by子句中。
在此声明:
SELECT *
FROM namethatchampion_stats
GROUP BY User
ORDER BY Seconds
您是说给我一个行(随机),为每个用户,然后按秒订购这些随机行中,所以即使你有顺序的,这不影响分组:
的MySQL Docs状态
该服务器是可以自由选择从每个组中的任何值,所以,除非它们是相同的,所选择的值是不确定的。此外,每个组的值的选择不能通过添加ORDER BY子句来影响。
因此,除非您的列从聚合中排除,并且组在功能上依赖于组中包含的列(例如主键),然后使用显式分组。在您的方案以获得所有从表中的行,你可以使用:
SELECT stat.ID,
stat.User,
stat.Seconds,
stat.Time
FROM NamethatChampion_stats Stat
INNER JOIN
( SELECT User, MIN(Seconds) AS Seconds
FROM NamethatChampion_stats
GROUP BY User
) MaxStat
ON MaxStat.User = stat.User
AND MaxStat.Seconds = stat.Seconds
ORDER BY Seconds ASC
LIMIT 100
Example on SQL Fiddle
上述方法的缺点是,如果一个用户拥有2条具有相同最快的时间既会被退回。它需要进一步的聚合来移除这些重复项(您可能需要通过第一次或最后一次测试以相同的分数进行限制)。
你想要每个学生的最高分数吗?或者第一个?还是最后一个提交? – 2013-03-08 13:19:56
秒列保存的数据和时间列保存的数据是什么? – Eugene 2013-03-08 13:21:44
我无法理解,mysql开发网站上有太多例子...太难以谷歌了吗? – 2013-03-08 13:23:08