sql—如何使用mysql获取特定用户的排名

7nbnzgx9  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(365)


我将计算并得到所有用户和列表中没有重复排名的特定用户的排名。排名必须以此为基础:

order by progress_percent desc, gold_count desc

建议一个查询来实现这样的事情。

klh5stk1

klh5stk11#

我很高兴有一天mysql5x被mysql8+完全取代了,mysql中有很多真正的窗口函数。不过,在那之前,对于mysql 5x/mariadb<10.2,您可以使用以下内容:

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

编辑:很显然,直到10.2之前,mariadb中才添加了窗口函数-s
如果您使用的是mysql 8+或mariadb 10.2+,则只需使用rank窗口函数:

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>

相关问题