PostgreSQL 查询数组中不同元素的聚合计数

PostgreSQL query for an aggregate count of distinct elements within an array

我想计算跨多行的字符串数组中每个唯一标记的总出现次数,并将其全部作为 PostgreSQL 查询的一部分进行计算。

我正在使用 Prisma,但我怀疑如果可能的话,我必须通过 $queryRaw 来完成此操作。

在我的 schema.prisma 中,allTags 设置为字符串数组:

  allTags                 String[]

这在数据库模式中变成了 _text,下划线似乎意味着它是一个数组:

    "allTags" _text,

假设数据如下:

allTags
------------------------------
{JavaScript, Vue.js}
{JavaScript, Node}
{TypeScript, JavaScript, Node}

...输出应如下所示:

count + tag
------------------
3     | JavaScript
2     | Node
1     | Vue.js
1     | TypeScript

我的预感是我可能需要在这里以某种方式使用子查询(我已经看到提到 LATERAL),但我不能完全拼凑起来。

可能是对数组取消嵌套的横向连接。

select count(*) as "count", tag
from your_table t
cross join lateral unnest(allTags) as tags(tag)
group by tag
order by 1 desc;
count tag
3 JavaScript
2 Node
1 Vue.js
1 TypeScript

演示 db<>fiddle here