SQL CASE WHEN и использование переменной @x - PullRequest
0 голосов
/ 24 марта 2019

У меня есть выбор, где мне нужно определить группы значений в диапазоне. Но выбор работает ненадежно. У меня проблема с его внутренней частью, где я использую CASE WHEN ... цель состоит в том, чтобы пометить каждую непрерывную серию значений уникальным значением группировки. Я ожидаю этого: КОГДА значение столбца находится в диапазоне, тогда не меняйте номер группы В противном случае увеличьте номер группы на один

Я не знаю, что не так. Спасибо всем за советы.

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 голосов
/ 24 марта 2019

Если вы пытаетесь перечислить значения, где «разрывы» - это значения между 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;

Вы можете инициализировать значение непосредственно в своем запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...