Ранжирование совместных позиций в MySQL

Ниже то, что у меня есть

  userid score 
    1       8    
    2       5    
    3       4    
    4       4    
    5      10    
    6       3  

То, что я хочу, как показано ниже

userid score position
    5      10     1
    1       8     2
    2       5     3
    3       4     4
    4       4     4
    6       3     5

НОТА:

У меня есть код, где я создал вывод ниже,

userid score position
    5      10     1
    1       8     2
    2       5     3
    3       4     4
    4       4     4
    6       3     6

Код

SELECT userid, score, 
(SELECT COUNT(*) FROM fschema.mytab3 u2 
WHERE 
u2.score > u1.score) + 1 AS position FROM fschema.mytab3 u1
ORDER BY position

Я хочу, чтобы пользователь 6 имел position как 5 вместо 6

3 ответа

Решение

Как насчет этого?

SELECT userid, score, 
(SELECT COUNT(distinct u2.score) FROM fschema.mytab3 u2 
WHERE 
u2.score > u1.score) + 1 AS position FROM fschema.mytab3 u1
ORDER BY position

Попробуй это -

SELECT
  *,
  @r:=IF(@score IS NULL OR @score <> score, @r+1, @r) position, @score:=score
FROM
  fschema.mytab3,
  (SELECT @r:=0, @score:=NULL) t
ORDER BY
  score DESC, userid

Я думаю, что вы можете попробовать это с помощью переменных, что выглядит проще. Что-то вроде этого:

SELECT userid, score, @rownum:=@rownum+1 as position
FROM fschema.mytab3 u1, (SELECT @rownum:=0) r
ORDER BY score;

(В настоящее время я не могу проверить запросы MySql, пожалуйста, извините, если есть какая-то ошибка)

Другие вопросы по тегам