假设我的数据中有以下json变量数组:

pets
---
[{"type":"dog", "name":"fido"}, {"type":"cat", "name":"steve"}, {"type":"dog", "name":"carl"}]
[{"type":"dog", "name":"ellie"}, {"type":"fish", "name":"goldie"}]
[{"type":"cat", "name":"simone"}, {"type":"lizard", "name":"sparky"}]

我将如何构造一个SQL查询,以使每一行都有一个dog names的数组,如下所示:

dog_names
---
["fido", "carl"]
["ellie"]
[]

目前,我得到的最大收获是使用以下工具过滤数据:

filter(pets, r -> r.type= 'dog')

这会正确地过滤数组,并且在数组的基数为1的情况下,允许我使用索引正确地进行查询,但我希望捕获所有的名字(并且在没有找到狗的情况下不中断).

需要说明的是,PETS的数据类型是ROW.

推荐答案

根据用法,您似乎有ROW‘S的数组,所以您可以用类似的方式对过滤后的数组使用transform:

transform(filter(pets, r -> r.type= 'dog'), r -> r.name)

Sql相关问答推荐

用于匹配红旗和绿旗的SQL查询

SQL Select 最小优先级

不同表达方式时的大小写

对表进行多项 Select 以返回最大值和时间

MS Access问题查询中的自定义字段

Haystack针相交-在元素最多的Haystack中查找集合

基于开始/结束日期重叠的BigQuery突发行

MySQL中的递归查询邻接表深度优先?

仅当 SQL Server 中的表为开时,才在存储过程中使用更改跟踪

在 R 值的 SQL 块中显示值

POSTGRES to_timestamp() 假定 UTC 字符串为本地时间

列(值不为空)到其他有序列

我如何编写一个遍历数组数组并将所有值连接成一个字符串的 postgres 函数

字符串从更改到表列和查询中的一行的转换错误

Oracle SQL 从多个条件中 Select 但具有相同的 id

如何通过存储过程将 root 的下一个子 node 作为父 node ?

当没有任何行存在时,将一个表中的行插入到另一个表中的更好方法

按 15 分钟递增计数分组,包括 0 计数

使用一组值进行分组和计数

Postgres 窗口函数未按预期工作