我是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
答案 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;