Выбор значений, сгруппированных по определенному идентификатору - PullRequest
1 голос
/ 23 сентября 2008

У меня есть приложение, которое отслеживает рекорды в игре.

У меня есть user_scores таблица, которая отображает user_id на счет.

Мне нужно вернуть 5 самых высоких баллов, но только 1 высокий балл для любого конкретного пользователя.

Так что, если пользователь X имеет 5 самых высоких баллов на чисто числовой основе, я просто возвращаю самый высокий, а затем следующие 4 пользовательских балла.

Я пытался использовать:

SELECT user_id, score 
FROM user_scores 
ORDER BY score DESC 
GROUP BY user_id 
LIMIT 5

Но, похоже, MySQL отбрасывает любой user_id с более чем 1 баллом.

Ответы [ 6 ]

6 голосов
/ 23 сентября 2008

Это должно работать:

SELECT user_id, MAX(score)
FROM user_scores 
GROUP BY user_id 
ORDER BY MAX(score) DESC 
LIMIT 5
1 голос
/ 23 сентября 2008
SELECT user_id, MAX(score) AS score
FROM user_scores 
GROUP BY user_id
ORDER BY score DESC
LIMIT 5

Должен сделать работу за вас ... хотя не забудьте создать индексы ...

0 голосов
/ 23 сентября 2008

Я не знаю, был ли это недостаток кофеина или просто взрыв мозга, но ответы здесь были так просты.

На самом деле я понял, что это работает с этим чудовищем:

SELECT s1.user_id, 
    (SELECT score FROM user_scores s2 WHERE s2.user_id = s1.user_id ORDER BY score DESC LIMIT 1) AS score 
FROM user_scores s1         
GROUP BY s1.user_id
ORDER BY s1.score DESC        
LIMIT 5
0 голосов
/ 23 сентября 2008

Возврат только максимальной оценки для данного пользователя выглядит примерно так:

SELECT user_id, max(score) FROM user_scores
GROUP BY user_id
0 голосов
/ 23 сентября 2008

Можете ли вы использовать оператор Distinct, чтобы сказать

SELECT DISTINCT(user_id), score
FROM user_scores
ORDER BY score DESC
LIMIT 5

не проверял, поэтому не уверен, что это точно сработает

0 голосов
/ 23 сентября 2008

Вы не можете группировать без сводной функции (SUM, COUNT и т. Д.)

Предложение GROUP BY говорит о том, как группировать SUM или COUNT.

Если вы просто хотите разбить длинный список на группы с общим значением, это не SQL. Вот что должно делать ваше приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...