使用join MYSQL在查询结果中获得位置

使用join MYSQL在查询结果中获得位置,mysql,sql,Mysql,Sql,我希望在查询中获得结果的位置,避免出现相同数量的双重结果。 结果是我表中用户的排名。 我的问题是当我有两个或更多的用户具有相同的分数时。他们将拥有相同的等级。 这是我现在的问题: SELECT users.user_name, us.score, COUNT(mrank.id) as rank FROM user users LEFT OUTER JOIN challenges_score_user_rel us ON us.user_id = users.id LEFT O

我希望在查询中获得结果的位置,避免出现相同数量的双重结果。 结果是我表中用户的排名。 我的问题是当我有两个或更多的用户具有相同的分数时。他们将拥有相同的等级。 这是我现在的问题:

SELECT users.user_name, us.score, COUNT(mrank.id) as rank
  FROM user users
  LEFT OUTER JOIN challenges_score_user_rel us
    ON us.user_id = users.id
  LEFT OUTER JOIN challenges_score_user_rel mrank
    ON mrank.score >= us.score
 GROUP BY users.id
 ORDER BY rank DESC

例如:如果两个用户的得分最多,且该数量相等,则他们都将获得排名2。

这将打破关系,因为用户id越大,排名越高

SELECT users.user_name, us.score,
    (SELECT COUNT(*) FROM challenges_score_user_rel us2
    WHERE (us2.score < us.score OR us2.user_id = us.user_id)
    OR (us2.score = us.score AND us.user_id < us2.user_id)) rank
FROM user users 
LEFT OUTER JOIN challenges_score_user_rel us
    ON us.user_id = users.id
ORDER BY rank DESC
与自联接相同的查询

SELECT users.user_name, us.score, COUNT(*) rank
FROM user users 
LEFT OUTER JOIN challenges_score_user_rel us
    ON us.user_id = users.id
JOIN challenges_score_user_rel us2
    ON (us2.score < us.score OR us2.user_id = us.user_id)
    OR (us2.score = us.score AND us.user_id < us2.user_id)
GROUP BY users.user_name, us.score    
ORDER BY rank  DESC

当多个用户拥有相同的分数时,应该如何确定排名?排名应该是唯一的