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

PostgreSQL:forループを使用してテーブルの行を反復処理し、現在の行に基づいて列の値を取得します

    このためにループや関数さえ必要ありません。

    テリトリーごとの合計数は単一の集計で計算できるため、実行したいことは単一の更新ステートメントで実行できます。

    SELECT salesterritoryid, count(*) as total_count
    FROM salesperson_t
    group by salesterritoryid
    

    次に、これをソースとして使用して、テリトリーテーブルを更新できます。

    UPDATE territory2_t
       SET total_sales_person = t.total_count
    FROM (
       SELECT salesterritoryid, count(*) as total_count
       FROM salesperson_t
       group by salesterritoryid
    ) t 
    WHERE territoryid = t.salesterritoryid;
    

    理解しやすいかもしれませんが、テーブルが大きいほど遅くなる代替手段は、相互に関連するサブクエリを使用した更新です

    UPDATE territory2_t tg
       SET total_sales_person = (select count(*) 
                                 from salesperson_t sp
                                 where sp.salesterritoryid = tg.territoryid);
    

    1回目と2回目の更新にはわずかな違いがあります。2回目の更新ではtotal_sales_personが0に更新されます。 (ゼロ)営業担当者がまったくいない地域の場合。最初のものは、営業担当者テーブルに実際に存在するテリトリーのカウントのみを更新します。




    1. WoocommerceバリエーションIDを取得するにはどうすればよいですか?

    2. MySQLクエリの入力パラメータの構文

    3. JPAエンティティ、Oracle 10g、およびカレンダータイプのプロパティに問題はありますか?

    4. JSONデータをMYSQLに挿入する最良の方法