从唯一的分解数据列表创建 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
val | cnt
:---- | --:
bar | 2
foo | 3
hello | 2
您可以结合使用 string_to_array
和 unnest
来实现。
尝试下面的查询
select
unnest(string_to_array(mycol,' / ')), count(*)
from mytable
where mycol IS NOT NULL
group by 1
当我提出这个请求时:
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
val | cnt :---- | --: bar | 2 foo | 3 hello | 2
您可以结合使用 string_to_array
和 unnest
来实现。
尝试下面的查询
select
unnest(string_to_array(mycol,' / ')), count(*)
from mytable
where mycol IS NOT NULL
group by 1