Я бы посоветовал, чтобы избежать неявной группировки, предлагаемый 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 записи с одинаковым быстрым временем и будет возвращаться. Для удаления этих дубликатов потребуется дополнительная агрегация (вам, вероятно, необходимо будет ограничить первым или последним тестом с одинаковой оценкой).
Вы хотите получить лучший результат для каждого учащегося? Или первый?Или последний отправлен? –
Какие данные хранится в столбце секунд и какие данные хранится в столбце времени? – Eugene
Я не могу понять, слишком много примеров на сайтах mysql dev ... слишком сложно для Google? –