我试图在BQ中解析这个json.

{
  "variations":[
    {
      "prime":{
        "name":[
          {
            "variant":{
              "indicator":["helm"]
            }
          },
          {
            "variant":{
              "indicator":["chart"]
            }
          }]
      }
    }]
}

我想要的输出是

variant
helm,chart

我try 了下面的查询,得到了error: Scalar subquery produced more than one element.分.如果我重写它,使用嵌套数组,一切都会很完美.然而,当我试图通过遵循相同的概念来使用标量子查询时,它不起作用.我认为这应该行得通,但我不知道我错过了什么.

SELECT
 ARRAY(
   SELECT
     STRUCT(
       STRING_AGG(
          (SELECT 
             STRING_AGG(JSON_EXTRACT_SCALAR(z, '$')) 
           FROM UNNEST(
               (SELECT 
                  JSON_EXTRACT_ARRAY(y, '$.variant.indicator') 
                FROM UNNEST(JSON_EXTRACT_ARRAY(x, '$.prime.name')
               ) AS y
           )
          ) AS z)
       ) AS variant
     )
   FROM UNNEST(JSON_EXTRACT_ARRAY(json_string, '$.variations')) AS x
 ) AS variations
FROM json_string

任何帮助都将不胜感激.

推荐答案

考虑下面的方法

select 
  ( select string_agg(trim(indicator, '"')) 
    from unnest(json_extract_array(json_string, '$.variations')) variation,
    unnest(json_extract_array(variation, '$.prime.name')) variants,
    unnest(json_extract_array(variants, '$.variant.indicator')) indicator
  ) variant
from your_table               

如果应用于问题中的样本数据,则输出为

enter image description here

Sql相关问答推荐

如何在Snowflake SQL存储过程中传递LIMIT和OFFSET的参数?

Lag()函数的差异:R与SQL(将R代码转换为SQL)

从原始表列中经过JSON字符串化的对象数组构建视图

PostgreSQL基于2个COLS的任意组合 Select 唯一行

如何查找所提供日期范围的所有季度开始日期和结束日期

SQL:如何查找聚合满足条件的连续日期

每年独特口味的冰淇淋数量

在SQL中为两个日期之间的每个日期添加行

如何简化此PostgreSQL查询以计算平均值?

SQL 搜索 - 获取最大值日期的奇怪行为

复制行并根据 Oracle SQL 中其他表的值更改值

Spark / Hive:如何获取列中正值的百分比?

SQL Server - 判断 ids 层次 struct 中的整数 (id)

在没有订单的情况下,如何生成一个值为0的顾客天数行

标量子查询中的窗口函数不起作用

添加一列并根据其他列值进行填充

As400 (IBM i) SQL 表 QSYS2.SYSTABLES 上的元数据

PostgreSQL Select 具有两列的自引用

SQL Group By 然后映射出是否存在值

如何部分转置表格