sql >> データベース >  >> RDS >> Mysql

mysqlのレコードのグループに同じシリアル番号を与える方法

    グループは、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;
    


    1. MS Accessの破損パート1:一般的な原因

    2. インデックスが多いテーブルの一括挿入が遅い

    3. MariaDBで照合を表示する

    4. MySQLで過去24時間のレコードを取得する方法