このためにループや関数さえ必要ありません。
テリトリーごとの合計数は単一の集計で計算できるため、実行したいことは単一の更新ステートメントで実行できます。
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
に更新されます。 (ゼロ)営業担当者がまったくいない地域の場合。最初のものは、営業担当者テーブルに実際に存在するテリトリーのカウントのみを更新します。