heretic_man
@heretic_man

Как вывести все остальные поля при операции GROUP BY?

Есть табличка с игроками и нужно вывести топ по рейтингу

таблица:

id________user_id________score___________________ user_name
1                555               10000                     Fred
2                666               4400                       Smith
3                555               30000                     Fred


Должно получиться типо:

3          555    30000       Fred
2         666     4400         Smith


Т.Е максимальные не поторяющиеся результаты пользователя (фильтрованные по рейтенгу)

я делаю вот так
select user_id, max(score) as score
from game_api_score
group by user_id
order by score desc
limit 10;


но мне нужно выводить все поля а не только user_id и score
  • Вопрос задан
  • 150 просмотров
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY score DESC) rn
    FROM source_table
)
SELECT *
FROM cte
WHERE rn = 1
-- ORDER BY score DESC LIMIT nnn
;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
iMedved2009
@iMedved2009
Не люблю людей
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Решение зависит от СУБД.
Для MySQL 8:
SELECT DISTINCT FIRST_VALUE(`id`) OVER `win` AS `id`, `user_id`, 
      FIRST_VALUE(`score`) OVER `win` AS `score`,
      FIRST_VALUE(`user_name`) OVER `win` AS `user_name`
  FROM `game_api_score`
  WINDOW `win` AS (PARTITION BY `user_id` ORDER BY `score` DESC)

Но, по хорошему, имени игрока в этой таблице быть не должно, оно должно браться из отдельной таблицы игроков.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы