2013-06-28 3 views
0

У меня есть таблица с простой схемой: user_id, score и я хотел бы извлечь n записей с наивысшей оценкой, так что каждый user_id будет представлен только один раз ,выберите максимум n записей из таблицы с не более чем одной записью для каждой группы

Этот вопрос похож на Get top n records for each group of grouped results, за исключением того, что вместо того, чтобы требовать n представителей на группу, мне нужно n представителей таблицы с максимальной записью для каждой группы.

Таким образом, если я ищу п = 3, выполнив запрос на:

user_id | score 
     1 | 10 
     2 |  9 
     1 | 11 
     2 |  8 
     3 |  8 
     4 | 12 

должен давать:

user_id | score 
     4 |  12 
     1 |  11 
     2 |  9 

ответ

2
SELECT user_id, MAX(score) FROM table GROUP BY user_id ORDER BY MAX(score) DESC LIMIT 3; 
+0

о ничего себе, я был gymnasting через само присоединяется и подзапросы и все такое, так что рад, что это простое решение! – Mala

+1

@Mala: Тогда вы все еще думаете «RBAR - Row By Agonizing Row». Вместо этого научитесь думать 'column by column'; в этом случае максимальный балл для топ-3 пользователей быстро приводит к этому решению. –

+0

Если бы я добавил столбец даты в таблицу, как я могу продлить это, чтобы вернуть правильную дату? Тривиальное расширение выбора даты также возвращает первую дату вместо даты, связанной с максимальным счетом – Mala

Смежные вопросы