You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于现有列新增标准化姓名列而非更新原列(PostgreSQL)

按staff_n归一化姓名并新增存储列

原始数据

创建表并插入数据:

create table mytest (
staff_n int,
emp_name text
);

insert into mytest values (1,'James'),(1,'James H'),(2,'B Hua'),(2,'B Huatur');

原始表数据:

staff_nemp_name
1"James"
1"James H"
2"B Hua"
2"B Huatur"

原有实现(更新原列)

之前通过以下SQL将原emp_name列原地更新为对应staff_n的最大姓名值:

with temp_t as (
select staff_n,max(emp_name) as max_emp from mytest
group by staff_n)
update mytest
set emp_name = max_emp
from temp_t
where mytest.staff_n = temp_t.staff_n;

更新后原列被覆盖,数据变为:

staff_nemp_name
1"James H"
1"James H"
2"B Huatur"
2"B Huatur"

新增归一化列的解决方案

要保留原emp_name列,新增emp_name_normalized列存储归一化值,分两步操作:

1. 添加新列

先给表新增目标列:

ALTER TABLE mytest ADD COLUMN emp_name_normalized text;

2. 填充新列值

使用CTE关联分组后的最大姓名值,更新新列:

WITH temp_t AS (
    SELECT staff_n, MAX(emp_name) AS max_emp 
    FROM mytest 
    GROUP BY staff_n
)
UPDATE mytest
SET emp_name_normalized = temp_t.max_emp
FROM temp_t
WHERE mytest.staff_n = temp_t.staff_n;

最终结果

执行后表数据如下:

staff_nemp_nameemp_name_normalized
1"James""James H"
1"James H""James H"
2"B Hua""B Huatur"
2"B Huatur""B Huatur"

内容的提问来源于stack exchange,提问作者moth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 19:38:17