как дать такой же серийный номер для группы записей в MySQL - PullRequest
0 голосов
/ 04 февраля 2019

Я просто новичок в MySQL.У меня есть записи, подобные приведенным ниже, в таблице тележек

 id   code
 1     100
 2     101
 3     102
 4     100
 5     100
 6     101

Мой исключенный вывод, как показано ниже: -

id     code    serial_number
 1     100        1
 2     101        2
 3     102        3
 4     100        1
 5     100        1
 6     101        2

Я хочу тот же серийный номер, который принадлежит к той же группе, то есть коду.Кто-нибудь может мне помочь, как это сделать?

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Согласно вашему примеру, у вас всегда один и тот же серийный номер для кода.Итак, что вы получаете?

Вот очень простой запрос:

select id, code, code - 99 as serial_number
from mytable
order by id;
0 голосов
/ 04 февраля 2019

Ваши группы определяются, начиная с code = 100.Это немного сложно.В MySQL 8+ вы можете использовать оконные функции для определения групп, а затем row_number(), чтобы назначить serial_number:

select c.*, 
       row_number() over (partition by grp order by id) as serial_number
from (select c.*,
             sum( code = 100 ) over (order by id) as grp
      from carts c
     ) c;

Это намного сложнее в более ранних версиях MySQL.

Вы можете идентифицировать группу, используя подзапрос:

select c.*,
       (select count(*)
        from carts c2
        where c2.id <= c.id and c2.code = 100
       ) as grp
from carts c;

Затем вы можете использовать переменные для получения необходимой информации:

select c.*,
       (@rn := if(@g = grp, @rn + 1,
                  if(@g := grp, 1, 1)
                 )
       ) as serial_number
from (select c.*,
             (select count(*)
              from carts c2
              where c2.id <= c.id and c2.code = 100
             ) as grp
      from carts c
      order by grp, id
     ) c cross join
     (select @g := -1, @rn := 0) params;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...