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

groupbyで更新

    あなたの質問は少し紛らわしいです。あなたは値bを設定したいと言います パーティションaから最小値に その列b はとの行にあり、b = 1を含む行は 手つかずのままにしておく必要があります。

    私があなたの質問でコメントとして見ることができるものから(私はそれがあなたの期待される出力であると思います)、あなたはまた1に続く最小値を取得したいと思います パーティション内-したがって、基本的にbの最小値が必要です 1より大きい 。

    以下はこれを行うSQLクエリです

    UPDATE t1 alias
      SET b = (
        SELECT min(b) 
        FROM t1 
        WHERE alias.a = t1.a 
          AND t1.b > 1 -- this would get the minimum value higher than 1
        GROUP BY a
      )
      WHERE alias.b > 1 -- update will not affect rows with b <= 1
    

    更新後の出力

     a | b 
    ---+---
     1 | 0
     1 | 1
     2 | 1
     2 | 2
     3 | 1
     3 | 2
     3 | 2
     4 | 1
     4 | 3
     4 | 3
     4 | 3
    



    1. SQLクエリ:テーブルから順序付けられた行をフェッチします-II

    2. MySQLトリガーの設定

    3. 以前に宣言された関数を再宣言できません

    4. PHPとMySQL-ソースコードでパスワードを回避する方法は?