0

我想查询我的大型 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'
4

1 回答 1

1

为了获得特定名称的排名,请尝试以这种方式

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; 
于 2011-02-26T03:31:59.213 回答