set @rank=0;
select *,
@cv:=(
SELECT CONFIG_VALUE_TYPE from fcs_system_config ORDER BY CONFIG_VALUE_TYPE DESC limit 1
) as cv,
if (@cv=CONFIG_VALUE_TYPE,@rank:=@rank+1,@rank:=1) as rank
from fcs_system_config where state=1
ORDER BY CONFIG_VALUE_TYPE DESC
目的:
根据CONFIG_VALUE_TYPE中相同的值进行序号递增,当CONFIG_VALUE_TYPE中的值变化之后,重新开始计数
问题点:
在if中,为false的情况下,我需要同时更新两个变量,一个是@cv,一个是@rank,这个怎么实现?
有没有优化方式?说实话这么写我自己都觉得很傻
我知道可以用rowNumber函数可以实现,但是数据库限制不能使用该函数,我怎么通过这种自定义变量的方式进行实现呢?
case when 也可以
set @cv = -1;
set @rank = 0;
select *,
if (@cv=CONFIG_VALUE_TYPE,@rank:=@rank+1,(@rank:=1)and(@cv:=CONFIG_VALUE_TYPE)) as rank
from fcs_system_config where state=1
ORDER BY CONFIG_VALUE_TYPE DESC
这样可以,但是当CONFIG_VALUE_TYPE的值等于0的时候,rank字段显示的是0,2,3,4,少了1,请问是什么问题