Как получить звание конкретного пользователя с MySql - PullRequest
0 голосов
/ 27 августа 2018

enter image description here

Я собираюсь вычислить и получить ранг всех пользователей и определенного пользователя с без дубликата место в списке.Оценка должна основываться на этом:

order by progress_percent desc, gold_count desc

Предложить запрос для достижения такой вещи.

1 Ответ

0 голосов
/ 27 августа 2018

Я буду рад за тот день, когда MySQL 5x полностью вытеснен MySQL8 + и есть реальные оконные функции в MySQL.Однако до этого дня для MySQL 5x / MariaDB <10.2 вы можете использовать что-то вроде: </p>

SELECT username
  , progress_percent
  , gold_count
  , @uRank := @uRank + 1 AS theRank
FROM mytable t, ( SELECT @uRank := 0 ) r
ORDER BY progress_percent DESC, gold_count DESC, modify_date DESC

EDIT: очевидно, что функции окна не добавлялись в MariaDB до 10.2.: -S

Если бы вы использовали MySQL 8+ или MariaDB 10.2+, вы можете просто использовать функцию окна рейтинга:

SELECT username
  , progress_percent
  , gold_count
  , ROW_NUMBER() OVER (ORDER BY progress_percent DESC, gold_count DESC, modify_date DESC ) AS theRank
FROM mytable t
ORDER BY theRank

РЕДАКТИРОВАТЬ 2:

Для конкретного пользователя просто поместите вышеупомянутые запросы в подзапрос и SELECT Rank, который вы хотите.

SELECT s1.username, s1.progress_percent, s1.gold_count
FROM (
    [above query here]
) s1
WHERE s1.theRank = <theRankYouWant>

или

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