我有下表:
id type result
--- --- ------
1 a 39
1 b 412
2 a 42
3 a 32
3 b 390
现在我想在此表中为依赖于类型的结果添加排名,因此每个类型应根据列结果中的值升序一个排名(并且原始表中有大约20种不同的类型) )。
结果应该是这样的:
id type result rank
-- --- ------ ----
1 a 39 2
1 b 412 2
2 a 42 3
3 a 32 1
3 b 390 1
我在这里找到了几个向表添加排名的解决方案,但是如何根据另一列的值创建排名呢?
答案 0 :(得分:1)
在MySQL中执行此操作的最简单方法是使用变量:
select t.*,
@rn := if(@type = type, @rn + 1,
if(@type := type, 1, 1)
) as ranking
from table t cross join
(select @type := NULL, @rn := 0) vars
order by type, result;
请注意,所有变量都在select
子句中的单个表达式中使用。这很重要,因为MySQL不保证表达式的评估顺序。因此,if(@type := type, 1, 1))
篇。