我會建議,以避免由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