首页 > 解决方案 > 使用 rank 函数基于 mysql 中的多列对数据进行排名

问题描述

我对 mysql 很陌生,并试图根据两个字段对最高记录进行排名

与您共享当前脚本和输出以及所需的输出

当前脚本:

select u_rank, c_rank,u_name,c_name, 
        @curRank := @curRank + 1 AS rank 
from ( 
        SELECT u_rank, c_rank,u_name,c_name 
        from abc
    ) a, 
     (
        select @curRank := 0
    ) r 
order by c_rank,u_rank

当前输出

在此处输入图像描述

我想要的输出是

在此处输入图像描述

请帮忙

标签: mysqlranking

解决方案


如果我正确地解决了您的问题,则您希望对 c_ranks 升序或每个 u_name 进行排名,然后按该排名然后按 u_rank 排序。之后,您需要按该顺序获得所有记录的排名。我不确定我刚才的措辞是否有意义......但以下内容应该会为你得到这个结果:

SET @rank1 = 0;
SET @rank2 = 0;
SET @u_name = '';

SELECT u_rank, c_rank, u_name, c_name, @rank2 := @rank2 + 1 AS rank
FROM (
      SELECT u_rank, 
             c_rank, 
             c_name, 
             @rank1 := (@rank1 + 1 - IF(@u_name = u_name, 0, @rank1)) AS rank1, 
             @u_name := u_name AS u_name 
      FROM abc 
      ORDER BY u_name, c_rank
) foo
ORDER BY rank1, u_rank;

推荐阅读