SQL CASE WHEN和@x变量用法

时间:2019-03-24 09:34:14

标签: mysql sql

我选择了需要标识范围内值组的位置。但是选择工作不可靠。我在内部使用CASE WHEN时遇到问题...目标是用唯一的分组值标记每个连续的值系列。我期望这样: 当列的值在范围内时,则不更改组号 ELSE将组号加1

我不知道怎么了。谢谢大家的建议。

SELECT *
, CASE WHEN value >= 17 AND value <= 18 THEN @x=@x ELSE @x=@x+1 END grp 
FROM my_table

我希望:

value     grp
18.9607   0
17.8623   1
17.0396   1
19.8252   2
19.746    3

但是我得到了

value     grp
18.9607   null
17.8623   null
17.0396   null
19.8252   null
19.746    null

实际上所有grp值都为空

1 个答案:

答案 0 :(得分:0)

如果您尝试枚举“中断”为17到18之间的值,我建议:

select t.*,
       (@grp := if(value >= 17 and value <= 18, @grp,
                   @grp + 1
                  )
       ) as grp
from my_table t cross join
     (select @grp := 0) params;

您可以直接在查询中初始化值。