Postgres - 使用字典转换列名?
Postgres - use a dictionary to convert column names?
我有一个 table 列 FIRSTNAME LASTNAME 并且我想创建第三列将这两列组合成 FIRSTNAME_LASTNAME 但也使用特殊字典来转换一些名称。假设我只想将它应用到 FIRSTNAME,例如:
Albert -> Funnyguy, Kathleen -> Nerd, Megan -> Weirdo
因此 "Albert Jones" 行的新列将是 "Funnyguy_Jones"。
目前,我在 psycopg2 中通过读取所有行(分批读取,因为数据库很大),使用 python 字典转换和创建新列,然后使用 UPDATE table SET newcol = tmp.newcol FROM (VALUES ...)
等。这很慢,因为将它读入 python。有什么建议吗?
编辑:并非所有名称都有转换(只有 10% 的名称有转换,对于那些我想保留原始名称的名称)
如果left join
匹配COALESCE
会选择t2.newName
,否则你会选择t1.firstName
SELECT t1.firstName,
t1.lastName,
COALESCE(t2.newName, t1.firstName) + '_' + t1.lastName as combinedName
FROM firstTable t1
LEFT JOIN newTable t2
ON t1.firstName = t2.firstName
我有一个 table 列 FIRSTNAME LASTNAME 并且我想创建第三列将这两列组合成 FIRSTNAME_LASTNAME 但也使用特殊字典来转换一些名称。假设我只想将它应用到 FIRSTNAME,例如:
Albert -> Funnyguy, Kathleen -> Nerd, Megan -> Weirdo
因此 "Albert Jones" 行的新列将是 "Funnyguy_Jones"。
目前,我在 psycopg2 中通过读取所有行(分批读取,因为数据库很大),使用 python 字典转换和创建新列,然后使用 UPDATE table SET newcol = tmp.newcol FROM (VALUES ...)
等。这很慢,因为将它读入 python。有什么建议吗?
编辑:并非所有名称都有转换(只有 10% 的名称有转换,对于那些我想保留原始名称的名称)
如果left join
匹配COALESCE
会选择t2.newName
,否则你会选择t1.firstName
SELECT t1.firstName,
t1.lastName,
COALESCE(t2.newName, t1.firstName) + '_' + t1.lastName as combinedName
FROM firstTable t1
LEFT JOIN newTable t2
ON t1.firstName = t2.firstName