我有类似问题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
有什么想法吗?
答案 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;