0

大規模なデータベースがあり、新しいフィールドを更新するためのロジックを実行したいと考えています。

主キーはidテーブルharvard_assignees用です

ロジックはこのようになります

  1. に基づいてすべてのレコードを選択しますid
  2. 各レコード(WHILE)について、if (state is NOT NULL && country is NULL), update country_out = "US" ELSE update country_out=country

ステップ1をPostgreSQLクエリとして、ステップ2を関数として見ています。正確な構文でネイティブに実装する最も簡単な方法を見つけようとしているだけです。

==== 2番目の関数はもう少し興味深いもので、必要です(私は信じています)DISTINCT

  1. すべてのDISTINCTforeign_keys(pat_type、patentの2変量キー)を検索します
  2. その値を含むレコードをカウントします(たとえば、n =3レコードにはfkey"D"、 "388585"があります)
  3. これらの3つのレコードを更新して、パーセントを1 / nとして識別します(たとえば、UPDATE 3レコード、パーセント= 1/3に設定)
4

1 に答える 1

1

最初のものについて:

UPDATE
     harvard_assignees
SET
    country_out = (CASE
                      WHEN (state is NOT NULL AND country is NULL) THEN 'US'
                      ELSE country
                  END);

最初は「id = ...」という条件がありましたが、実際にはすべてのレコードを更新したいと考えているため、それを削除しました。

そして2番目のものについて:

UPDATE           
    example_table
SET              
    percent = (SELECT 1/cnt FROM (SELECT count(*) AS cnt FROM example_table AS x WHERE x.fn_key_1 = example_table.fn_key_1 AND x.fn_key_2 = example_table.fn_key_2) AS tmp WHERE cnt > 0)

それはちょっと遅いでしょう。

ウィンドウ関数に基づくソリューションを考えています。それらも調べてみてください。

于 2010-07-16T12:55:39.770 に答える