取消嵌套 PostgreSQL 中的行并包括取消嵌套次数

Unnest row in PostgreSQL and include count of unnesting occurrences

继 Matt 在以下内容中的回答:

我想根据单元格中的一个字符将一行取消嵌套成多行,但是我还想包括一个计数列,其中包含一行被取消嵌套的次数。

我想要这个:

       name            |  id
-----------------------+------
 alpha, bravo, charlie |    1
 yankee, xray          |    2
 hotel                 |    3 
 indigo                |    4

变成这样:

       name            |  id  | count
-----------------------+------+-------
 alpha                 |    1 |   3
 bravo                 |    1 |   3
 charlie               |    1 |   3
 yankee                |    2 |   2
 xray                  |    2 |   2
 hotel                 |    3 |   1
 indigo                |    4 |   1

最初的 unnest 查询是:

SELECT unnest(string_to_array(name, ', ')) as name, id
FROM table

您可以将 cross join 与正则表达式一起使用:

select k, t.id, cardinality(regexp_split_to_array(t.name, ', ')) 
from tbl t cross join regexp_split_to_table(t.name, ', ') k

See fiddle.