如何在MySQL中为不同的列创建排名?
我有下表:如何在MySQL中为不同的列创建排名?,mysql,sql,Mysql,Sql,我有下表: id type result --- --- ------ 1 a 39 1 b 412 2 a 42 3 a 32 3 b 390 现在我想在这个表中为依赖于类型的结果添加排名,因此每个类型都应该有一个根据结果列中的值升序的排名(原始表中大约有20种不同的类型) 结果应该是这样的: id type result rank -- --- ------ --
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
我在这里找到了几种向表中添加排名的解决方案,但是如何在考虑其他列的值的情况下创建排名?在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))
fiece.和排名基于什么?也可能是重复的