Mysql 查询排名 (RowNumber) 和分组

标签 mysql rank

我有提到的类似问题in this thead

但它在 SQL Server 中,而 Mysql 不支持“分区依据”,因为我现在知道我能做什么?这是问题:

我有一个包含一些列的表:用户、类别、值

我想要进行一个查询,该查询将按值对所有用户进行排名,但会针对类别进行重置。

示例:

user1   CategoryA    10

user2   CategoryA    11

user3   CategoryA    9

user4   CategoryB    3

user1   CategoryB    11

查询将返回:

Rank   User     Category  
1     user2   CategoryA

2     user1   CategoryA

3     user3   CategoryA

1     user1   CategoryB

2     user4   CategoryB

有什么想法吗?

最佳答案

编辑2:基于OP的评论:

it worked with just a little bit wrong ranking and that's in the first rank.when similar categories with same value has the top rank one of them is the first in the rank and other is 2nd but they must have the first rank (1)

建议进行以下更改:

select rank, user, category, value
from (
  select user, @cc:=category category, @cv:=value value
    , case when @pc=@cc and @pv=@cv then @rn:=@rn
           when @pc=@cc and @pv!=@cv then @rn:=(@rn+1)
           else @rn:=1
      end as rank
    , @pc:=@cc as temp_currCat
    , @pv:=@cv as temp_currVal
  from user_category_values,
       (select @pc:='', @cc:='', 
               @pv:='', @cv:='', 
               @rn:=0) row_nums
  order by category asc, value desc
) results;

演示 @ MySQL 5.5.32 Fiddle

关于Mysql 查询排名 (RowNumber) 和分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23344738/

相关文章:

MySQL 查询基于多个列值选择顶级相机选项

mysql - 简单的 SQL 查询分类

父子关系的 MySql 查询优化

javascript - 动态字段的可靠下拉菜单

c - 存储mpi等级是否会提高性能

pandas 从多列分组中获得 1 排名

R:自动计算秩和

mysql - 奇怪的更新语句行为

data-structures - 就序列而言,位置是什么?

r - 在 R 中创建等级变量的有效方法