从唯一的分解数据列表创建 PostgreSQL 视图

Create a PostgreSQL view from a unique list of exploded data

当我提出这个请求时:

SELECT mycol FROM mytable WHERE mycol IS NOT NULL;

我得到这样的结果:

foo / bar / hello
foo / hello
foo / bar

每行的值用 / 分隔(space、斜线、space)。

如何创建具有计数的唯一值列表的视图?

bar 2
foo 3
hello 2

您可以在横向连接中使用 regexp_split_to_table() 将字符串拆分为行,然后聚合:

select x.val, count(*) cnt
from mytable t
cross join lateral regexp_split_to_table(t.mycol, '\s/\s') as x(val)
group by x.val

Demo on DB Fiddle:

val   | cnt
:---- | --:
bar   |   2
foo   |   3
hello |   2

您可以结合使用 string_to_arrayunnest 来实现。

尝试下面的查询

select 
unnest(string_to_array(mycol,' / ')), count(*) 
from mytable 
where mycol IS NOT NULL 
group by 1

DEMO