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

数式に従って列の値を再割り当てするUPDATEステートメント

    CASE ステートメントが役立つ場合があります。この例では:

    • source 、サム、位置8にあります
    • target 、bob、位置2にあります

    変数を実際の値に置き換えると、次のステートメントはすべてをソースから2つ下にシフトし、メンバー間をそのままにし、ターゲットをソースに等しく設定し、残りを下に移動します。

    postgres=> SELECT * FROM test order by sortval;
     name | sortval
    ------+---------
     bob  |       2
     tom  |       4
     mary |       6
     sam  |       8
     tim  |      10
    (5 rows)
    
    
    postgres=>      UPDATE test
    postgres->        SET sortval = CASE WHEN sortval <= 2 THEN sortval - 2
    postgres->                           WHEN sortval = 8  THEN 2
    postgres->                           WHEN sortval >= 8 THEN sortval - 2
    postgres->                           ELSE sortval
    postgres->                           END;
    UPDATE 5
    postgres=> SELECT * FROM test order by sortval;
     name | sortval
    ------+---------
     bob  |       0
     sam  |       2
     tom  |       4
     mary |       6
     tim  |       8
    (5 rows)
    

    それはリストの上の何かを動かすでしょう。リストを下に移動する場合も、同様のロジックを適用できます。また、負の数は問題なく、相対的な順序だけが重要であると想定しています。




    1. 何百万ものエントリでランキング

    2. グループごとに不足している日付を埋める

    3. MariaDBでのREGEXPのしくみ

    4. 警告:Mac OS High Sierraでbrewを使用してmysqlをインストールしようとすると、インストール後の手順が正常に完了しませんでした