使用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
当多个用户拥有相同的分数时,应该如何确定排名?排名应该是唯一的