MYSQL中最常见名字的快速排名

MYSQL中最常见名字的快速排名,mysql,group-by,ranking,rank,Mysql,Group By,Ranking,Rank,我想查询我的大型MYSQL用户数据库,找到最常见的名字并对它们进行排名。我还希望能够显示当前用户的名字排名。我想出了一个解决办法,但似乎有点慢。我想知道是否有更快的方法来做这件事 这是我提出的问题 SELECT rank,fname FROM (SELECT @rownum:=@rownum+1 rank,fname FROM (SELECT fname,count(*) FROM userlist GROUP BY fname ORDER BY

我想查询我的大型MYSQL用户数据库,找到最常见的名字并对它们进行排名。我还希望能够显示当前用户的名字排名。我想出了一个解决办法,但似乎有点慢。我想知道是否有更快的方法来做这件事

这是我提出的问题

SELECT rank,fname
   FROM (SELECT @rownum:=@rownum+1 rank,fname 
      FROM (SELECT fname,count(*) 
      FROM userlist GROUP BY fname 
      ORDER BY count(*) DESC) AS R1 
   JOIN (SELECT @rownum:=0) AS I) AS R2  
WHERE fname = 'Username'

为了获得特定名称的排名,请尝试以下方法

select count(*) + 1 as rank from 
    (select count(*) as number from userlist group by fname having number > 
       (select count(*) as number from userlist where fname='Username') order by number desc) as tab; 
编辑。如果要显示名称,请添加用户变量:

set @name = 'nick';
select @name as fname,count(*) + 1 as rank from 
    (select count(*) as number from userlist group by fname having number > 
       (select count(*) as number from userlist where fname=@name) order by number desc) as tab; 

那很好用。第一次运行时速度快23%,第二次运行(使用相同名称)时只需0.0001秒。谢谢