代码之家  ›  专栏  ›  技术社区  ›  Markus Rautopuro

在雪花中求和JSON数组中的值

  •  2
  • Markus Rautopuro  · 技术社区  · 8 年前

    我有一个包含以下JSON数组类型的源数据:

    [
      [
        "source 1",
        250    
      ],
      [
        "other source",
        58
      ],
      [
        "more stuff",
        42
      ],
      ...
    ]
    

    可以有1..N对字符串和类似这样的值。如何将此JSON中的所有值相加?

    1 回复  |  直到 8 年前
        1
  •  3
  •   Niklas Rosencrantz    8 年前

    你可以用 FLATTEN ,它将为输入数组的每个元素生成一行。然后可以直接访问该元素中的数字。

    create or replace table input as
    select parse_json($$
    [
      [
        "source 1",
        250    
      ],
      [
        "other source",
        58
      ],
      [
        "more stuff",
        42
      ]
    ]
    $$) as json;
    

    select index, value from input, table(flatten(json));
    -------+-------------------+
     INDEX |       VALUE       |
    -------+-------------------+
     0     | [                 |
           |   "source 1",     |
           |   250             |
           | ]                 |
     1     | [                 |
           |   "other source", |
           |   58              |
           | ]                 |
     2     | [                 |
           |   "more stuff",   |
           |   42              |
           | ]                 |
    -------+-------------------+
    

    所以你可以用 VALUE[1]

    select sum(value[1]) from input, table(flatten(json));
    ---------------+
     SUM(VALUE[1]) |
    ---------------+
     350           |
    ---------------+
    
    推荐文章