我有一个包含列的表格:
email1, email2, ... email5, domain_freqs
和函数get_domain: get_domain(example@gmail.com) = gmail.com
,
我有一个查找表,其中包含数据库中所有电子邮件中出现的所有电子邮件域的频率:
word nentry
gmail.com 130879
hotmail.com 12981
...
我想更新domain_freqs列以存储从查找表中提取的值数组。
例如,如果我有一条记录:
email1 = bob@gamil.com
email2 = bob@hotmail.com
然后我想将ARRAY[130879, 12981, NULL, NULL, NULL]
存储在domain_freqs列
答案 0 :(得分:0)
想出来。对于大约1米的联系人记录数据库,大约需要6分钟。如果有人知道这样做的更有效方法......
update emails e
set domain_freqs = (
select array_agg(nentry) as dom_freqs from (
select * from (
select *, unnest(ARRAY[
get_domain(email1),
get_domain(email2),
get_domain(email3),
get_domain(email4),
get_domain(email5)
]) as dom from emails e
) sub, LATERAL (
select nentry from lookup_table lt
where word = dom
) lat
) agg group by id having e.id = agg.id
);