SQL-запрос не возвращает разные значения - PullRequest
0 голосов
/ 10 марта 2019

У меня есть таблица лидеров игры, состоящая из 500 строк данных, и я написал скрипт, который возвращает эти данные и не имеет повторяющихся результатов. Тем не менее, я получаю двойные баллы, возвращенные мне. Вот мой сценарий.

SELECT DISTINCT 
    username, score, 
    FIND_IN_SET(score, (SELECT DISTINCT GROUP_CONCAT(score ORDER BY score DESC) 
                        FROM TPS_STATS)) AS rank
FROM 
    TPS_STATS 
ORDER BY
    rank ASC
LIMIT 100;

Пример повторяющихся результатов, которые я вижу, опубликован в виде изображения.

duplicates

1 Ответ

1 голос
/ 10 марта 2019

Если ваша версия MySql 8.0, тогда вы можете использовать row_number ():

SELECT 
  username, 
  score, 
  row_number() OVER (ORDER BY score desc, username) rn 
FROM TPS_STATS 
ORDER BY score desc, username 
LIMIT 100

См. Демоверсию .
Если оно ниже:

select 
  username,
  score,
  (select count(*) from TPS_STATS where score > t.score) +
  (select count(*) from TPS_STATS where score = t.score and username < t.username) + 1
  rank
from TPS_STATS t
order by rank, username
limit 100

См. Демоверсию

...