如何在PostgreSQL的同一列中拆分名称数据?

时间:2018-12-31 22:29:49

标签: string postgresql split pgadmin

我是PostgreSQL的新手,并且在Mac上使用PGADMIN 4。我有一列导入的数据,其中包含一些用户名,有时在同一列中有一个姓氏,主要是名字和姓氏。

我更关心的是能够查询和统计列中出现次数最多的名称。我将能够通过结果确定它是我需要的第一位还是最后一位。列出前50个应该这样做。请协助处理特定的代码,包括寻址表和列。

已经玩过,但是还需要更多:

select surname, count(*) from atreedata
    group by surname
    order by count(*) desc limit 40;

仅需一个名称,效果很好!我需要按名称和数量列出的最常用的名称。

公共列示例:

John Smith
jsmith3
Stacey123
Bob Smith
Jones

1 个答案:

答案 0 :(得分:0)

因此,如果我理解正确,则只需要在“姓氏”列中找到最多的单词即可。

有一个内置函数regexp_split_to_table,可以将字符串拆分为单词,并从这些单词创建行。所以:

select surname_word, count(*) as surname_word_count
from (
    select regexp_split_to_table(surname, E'\\s+') as surname_word
    from atreedata
) as surname_words
group by surname_word
order by surname_word_count desc
limit 40;