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
  • Вопрос задан
  • 103 просмотра
Решения вопроса 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)

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

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

Войти через центр авторизации
Похожие вопросы
28 мар. 2024, в 18:16
1000 руб./за проект
28 мар. 2024, в 18:15
90000 руб./за проект
28 мар. 2024, в 18:05
5000 руб./за проект