Как выбрать строки с наибольшим значением столбца и в случае дубликатов вернуть самую верхнюю строку?

0

У меня есть таблица player_ratings которая содержит два столбца: player_id и rating. Например:

 |  player_id     |       rating       | 
 |     1          |        950         |
 |     1          |        945         |
 |     2          |        850         |
 |     2          |        850         |

Я хочу вернуть список игроков с самым высоким рейтингом игроков.

Если в таблице есть повторяющиеся строки, верните самую верхнюю строку. Например, player_id 2 имеет две строки с одинаковым rating поэтому верните строку 3 в таблицу.

в списке не должно быть дубликатов игроков. (см ожидаемый результат)

Я попытался следующий запрос, но он не удаляет дубликаты строк:

SELECT * 
FROM player_ratings 
INNER JOIN ( SELECT player_id, MAX(rating) as max_rating FROM player_ratings GROUP BY player_id) topratings 
 ON player_ratings.player_id = topratings.player_id
 AND player_ratings.rating = topratings.max_rating 
ORDER BY player_ratings.rating DESC ;

АКТУАЛЬНЫЙ ВЫХОД

 |  player_id     |       ranking       | 
 |     1          |         950         |
 |     2          |         850         |
 |     2          |         850         |

ОЖИДАЕМЫЙ ВЫХОД

 |  player_id     |       ranking       | 
 |     1          |         950         |
 |     2          |         850         |
  • 0
    просто используйте разные
  • 1
    какая версия mysql у вас есть?
Показать ещё 1 комментарий
Теги:

4 ответа

0
Лучший ответ

Поскольку это всего лишь два столбца, идентификатор игрока и рейтинг, вы можете просто агрегировать:

select player_id, max(rating)
from player_ratings
group by player_id
order by max(rating) desc;
0

Вы можете попробовать ниже -

   SELECT player_id, MAX(rating) as max_rating FROM player_ratings 
   GROUP BY player_id
   order by max_rating desc
0

Используйте GROUP BY и MAX()

SELECT player_id, MAX(rating) as Rating
FROM player_ratings GROUP BY player_id
ORDER BY 2 DESC
0

Предполагая, что у вас есть уникальный идентификатор в player_ratings, вы можете сделать:

select pr.*
from player_ratings pr
where pr.player_ratings_id in (select pr2.player_ratings_id
                               from player_ratings pr2
                               where pr2.player_id = pr.player_id
                               order by pr2.max_rating desc, 
                                        pr2.player_ratings_id asc
                              );

Ещё вопросы

Сообщество Overcoder
Наверх
Меню