【问题标题】:PostgreSQL query for an aggregate count of distinct elements within an arrayPostgreSQL 查询数组中不同元素的聚合计数
【发布时间】:2022-01-25 12:30:10
【问题描述】:

我想计算跨多行的字符串数组中每个唯一标记的出现总数,并将其全部作为 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),但我无法将它完全拼凑起来。

【问题讨论】:

    标签: sql database postgresql prisma


    【解决方案1】:

    也许是横向连接到数组的取消嵌套。

    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

    dbfiddle here

    上的演示

    【讨论】:

    • 完美,这正是我一直在寻找和工作的。谢谢!
    猜你喜欢
    • 2016-10-17
    • 1970-01-01
    • 2018-01-12
    • 2020-02-04
    • 1970-01-01
    • 2020-11-25
    • 2021-10-10
    • 1970-01-01
    • 2012-06-11
    相关资源
    最近更新 更多