如何拆分 PostgreSQL 中同一列中的名称数据?
How to split name data in the same column in PostgreSQL?
我是 PostgreSQL 新手,正在 Mac 上使用 PGADMIN 4。我有一列导入的数据,其中包含一些用户名,有时是姓氏,大部分是同一列中的名字和姓氏。
我更关心的是能够查询和统计一个名字在该列中出现次数最多的情况。我将能够根据结果确定它是第一次还是最后一次满足我的需要。列出前 50 个应该可以。请协助提供具体代码,包括解决 table 和列。
玩过这个,但需要更多:
select surname, count(*) from atreedata
group by surname
order by count(*) desc limit 40;
只有一个名字效果很好!我需要按名称和计数列出的最常见名称。
常用列示例:
John Smith
jsmith3
Stacey123
Bob Smith
Jones
所以,如果我没理解错的话,你只需要找到姓氏栏中出现次数最多的单词即可。
有一个内置函数 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;
我是 PostgreSQL 新手,正在 Mac 上使用 PGADMIN 4。我有一列导入的数据,其中包含一些用户名,有时是姓氏,大部分是同一列中的名字和姓氏。
我更关心的是能够查询和统计一个名字在该列中出现次数最多的情况。我将能够根据结果确定它是第一次还是最后一次满足我的需要。列出前 50 个应该可以。请协助提供具体代码,包括解决 table 和列。
玩过这个,但需要更多:
select surname, count(*) from atreedata
group by surname
order by count(*) desc limit 40;
只有一个名字效果很好!我需要按名称和计数列出的最常见名称。
常用列示例:
John Smith
jsmith3
Stacey123
Bob Smith
Jones
所以,如果我没理解错的话,你只需要找到姓氏栏中出现次数最多的单词即可。
有一个内置函数 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;