排名(Row_Number)和分组的Mysql查询

时间:2014-04-28 15:13:03

标签: mysql rank

我有类似问题in this thead

但它在SQL服务器中并且Mysql不支持“Partition By”,因为我现在知道我该怎么办?这是问题:

我有一个包含一些列的表:User,Category,Value

我想创建一个查询,根据值给出一个所有用户的排名,但重置该类别。

示例:

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 个答案:

答案 0 :(得分:1)

编辑2 :根据OP的评论:

  

它只有一点点错误的排名,并且在第一个rank中有效。当具有相同categories的相似value具有最高{{1}时其中一个是rank中的第一个,另一个是第二个但他们必须有第一个rank(1)

建议进行以下更改:

rank

演示 @ MySQL 5.5.32 Fiddle

答案 1 :(得分:0)

您可以使用变量:

select rank, user, category
from (select t.*,
             @rank := if(@cat = category, @rank + 1, 1) as rank,
             @cat := category
      from table t cross join
           (select @cat := '', @rank := 0) const
     ) t
order by category, rank;