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 视为函数。只是想找出使用​​确切语法在本地实现的最简单方法。

==== 第二个功能更有趣,需要(我相信)DISTINCT

  1. 查找所有 DISTINCT foreign_keys(pat_type,patent 的二元键)
  2. 计数包含该值的记录(例如,n=3 记录具有 fkey "D","388585")
  3. 更新这 3 条记录以将百分比标识为 1/n(例如,更新 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 = ...”,但我删除了它,因为我相信你实际上想要更新所有记录。

对于第二个:

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 回答