【问题标题】:postgres 9.6 - creating array of objects JSON from multiple columnspostgres 9.6 - 从多列创建对象数组 JSON
【发布时间】:2018-12-30 05:01:07
【问题描述】:

我这里有以下数据集

http://sqlfiddle.com/#!17/70f9a/1

我想创建一个查询,结果如下:

  • key: 1, avg_time_1: [{ "category": 10, "avg_time": 10},{ "category": 20, "avg_time": 20 }] , avg_time_2: [{"category": 10, "avg_time": 20}, {"category": 20, "avg_time": 40}]
  • key: 2, avg_time_1: [{ "category": 10, "avg_time": 10},{ "category": 20, "avg_time": 60}] , avg_time_2: [{"category": 10, "avg_time": 50}, {"category": 20, "avg_time": 70}]
  • 这个想法只是以不同的方式重新呈现值 cols avg_time_1 和 avg_time_2(jsonb 值)

    【问题讨论】:

      标签: postgresql aggregate-functions jsonb postgres-9.6


      【解决方案1】:

      使用jsonb_build_object() 构建素数对象并使用jsonb_agg() 将它们聚合成一个json数组:

      select 
          key, 
          jsonb_agg(jsonb_build_object('category', category, 'avg_time', avg_time_1)) as avg_time_1,
          jsonb_agg(jsonb_build_object('category', category, 'avg_time', avg_time_2)) as avg_time_2
      from data_to_agg_json
      group by key
      
       key |                              avg_time_1                              |                              avg_time_2                              
      -----+----------------------------------------------------------------------+----------------------------------------------------------------------
         1 | [{"avg_time": 10, "category": 10}, {"avg_time": 30, "category": 20}] | [{"avg_time": 20, "category": 10}, {"avg_time": 40, "category": 20}]
         2 | [{"avg_time": 10, "category": 10}, {"avg_time": 60, "category": 20}] | [{"avg_time": 50, "category": 10}, {"avg_time": 70, "category": 20}]
      (2 rows)    
      

      SqlFiddle.

      【讨论】:

        猜你喜欢
        • 2018-03-29
        • 1970-01-01
        • 2022-01-19
        • 2019-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多