代码之家  ›  专栏  ›  技术社区  ›  Masoud Darvishian

如何使用MySql获取特定用户的排名

  •  -2
  • Masoud Darvishian  · 技术社区  · 8 年前

    enter image description here

    我要计算一下 所有用户 和 特定用户 具有 没有重复的 在名单上排名。排名必须以此为基础:

    order by progress_percent desc, gold_count desc
    

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

    1 回复  |  直到 8 年前
        1
  •  1
  •   Shawn    8 年前

    我很高兴有一天MySQL8+完全取代了MySQL 5x,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 Window函数:

    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>