0

当我提出这个要求时:

SELECT mycol FROM mytable WHERE mycol IS NOT NULL;

我得到这样的结果:

foo / bar / hello
foo / hello
foo / bar

每行都有用/(空格、斜线、空格)分隔的值。

如何使用 count 创建具有唯一值列表的视图?

bar 2
foo 3
hello 2
4

2 回答 2

3

您可以使用横向连接将字符串拆分为行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

DB Fiddle 上的演示

值 | cnt
:---- | --:
酒吧 | 2
富 | 3
你好 | 2
于 2020-11-05T09:35:46.397 回答
1

您可以使用 和 的组合string_to_arrayunnest实现此目的。

试试下面的查询

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

演示

于 2020-11-05T09:38:38.180 回答