Mysql RANK 没有给出每个类别的 RANK

标签 mysql sql

我尝试了以下操作,但它没有对每个类别进行明智的排名。相反,在不考虑类别的情况下对所有记录进行排名。我希望每个类别重新出现排名

select  rs.Section,rs.Field1,rs.Field2 , 
@curRank := @curRank + 1 AS rank 
from (
select rs.Field1,rs2.Field2 
from table rs
inner join table2 rs2 on rs.Field1=rs2.Field1
group by rs.Section,rs.Field1 
)rs,  (SELECT @curRank := 0) r

实际输出:(来自 Mysql 输出)

Category Field1 Field2 Rank
Male     10     10     1
Male     11     10     2
Male     12     10     3
....
FeMale   10     10     11
FeMale   11     10     12
FeMale   12     10     13
....

预期输出

Category Field1 Field2 Rank
Male     10     10     1
Male     11     10     2
Male     12     10     3
....
FeMale   10     10     1
FeMale   11     10     2
FeMale   12     10     3
....

最佳答案

我假设您正在使用的查询是:

select  rs.Category, rs.Field1, rs.Field2, @curRank := @curRank + 1 AS rank 
from (select rs.Cateogry, rs.Field1, rs2.Field2 
      from table rs inner join
           table2
           rs2 on rs.Field1 = rs2.Field1
      group by rs.Category, rs.Field1, rs.Field2
     ) rs cross join
     (SELECT @curRank := 0) vars
order by cateogry, field1;

或者类似的东西,其中字段名称是一致的。您需要一个变量来指定分组。以下内容将起作用:

select  rs.Category, rs.Field1, rs.Field2,
        (@curRank := if(@c = Category, @curRank + 1,
                        if(@c := Category, 1, 1)
                       )
        ) AS rank 
from (select rs.Cateogry, rs.Field1, rs2.Field2 
      from table rs inner join
           table2
           rs2 on rs.Field1 = rs2.Field1
      group by rs.Category, rs.Field1, rs.Field2
     ) rs cross join
     (SELECT @curRank := 0, @c := NULL) vars
order by cateogry, field1;

请注意,两个变量的赋值发生在一个语句中。这很重要,因为 MySQL 不保证 select 子句中表达式的求值顺序。另请注意 group by 的显式使用。我建议您使用它,而不是依赖 group by 按特定顺序生成结果(该功能在最新版本的 MySQL 中已弃用)。

关于Mysql RANK 没有给出每个类别的 RANK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26527846/

相关文章:

php - 关于数据库版本控制的建议

具有线性插值和分组依据的 SQL 查询

mysql - 按日期删除表而不删除系统表的函数/过程

java - 如何在 java sql 中获取列的最大整数值?

php - 日期比较 PHP Mysql

javascript - 在 sql 和 javascript 之间交换数据

php - sql 计算查询不运行,#1054 字段列表中的未知列

sql - 在同一查询中使用 UNION 和 UNION ALL

python - MySQL为什么cursor.execute(sql, multi=True)不起作用但2cursor.execute(sql)起作用?

mysql - 按日期和时间存储在两个不同的列mysql中