PostgreSQL和pl/pgsql语法,用于根据SELECT和FUNCTION(while循环,DISTINCT COUNT)更新字段
我有一个大型数据库,我想做一些逻辑来更新新字段 表harvard_assignees的主键是PostgreSQL和pl/pgsql语法,用于根据SELECT和FUNCTION(while循环,DISTINCT COUNT)更新字段,postgresql,plpgsql,Postgresql,Plpgsql,我有一个大型数据库,我想做一些逻辑来更新新字段 表harvard_assignees的主键是id 逻辑是这样的 根据id 对于每个记录(WHILE),如果(状态不为NULL&&country为NULL),则更新country\u out=“US”否则更新country\u out=country 我认为步骤1是一个PostgreSQL查询,步骤2是一个函数。只是想找出最简单的方法,用精确的语法在本地实现 ==== 第二个函数更有趣,需要(我相信)DISTINCT: 查找所有不同的外键(pat_类
id
逻辑是这样的
id
如果(状态不为NULL&&country为NULL),则更新country\u out=“US”否则更新country\u out=country
DISTINCT
:
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)
不过,那个会有点慢
我正在考虑一种基于窗口函数的解决方案,您可能也希望了解这些功能。您好,谢谢您的回复。第二个正在运行(希望正确);第一个给了我一个错误,“US”是否需要创建为变量再次感谢!monte{x:错误:“我们”列不存在,我的错-这些应该是单引号。