3

我这里有以下数据集

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

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

  • 键:1,avg_time_1:[{“category”:10,“avg_time”:10},{“category”:20,“avg_time”:20}],avg_time_2:[{“category”:10,“avg_time”: 20},{“类别”:20,“平均时间”:40}]
  • 键:2,avg_time_1:[{“category”:10,“avg_time”:10},{“category”:20,“avg_time”:60}],avg_time_2:[{“category”:10,“avg_time”: 50},{“类别”:20,“平均时间”:70}]
  • 这个想法只是以不同的方式重新呈现值 cols avg_time_1 和 avg_time_2(jsonb 值)

    4

    1 回答 1

    6

    用于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-07-22T17:56:32.533 回答