Postgres 9.6-jsonb列中特定字段的平均值,并由同一jsonb列中的另一个字段分组

时间:2018-07-22 12:23:08

标签: postgresql aggregate-functions jsonb postgres-9.6

我在这里显示了以下数据集

http://sqlfiddle.com/#!17/f9280/1

我想以一种获取每个键和类别平均排名

的方式查询数据

例如

  • 键1,类别10,avg_rank:95
  • 键1,类别20,平均等级:75
  • 键2,类别11,平均等级:105
  • 键2,类别12,平均等级:80
  • 对于在Postgres上进行此操作的任何帮助或良好参考,将非常感激:)

    1 个答案:

    答案 0 :(得分:2)

    在横向联接中使用jsonb_array_elements(data)

    select 
        key, 
        value->>'category' as category, 
        avg((value->>'rank')::numeric) as rank
    from jsonData
    cross join jsonb_array_elements(data)
    group by key, category
    
     key | category |         rank         
    -----+----------+----------------------
     1   | 10       |  95.0000000000000000
     1   | 20       |  75.0000000000000000
     2   | 11       | 105.0000000000000000
     2   | 12       |  80.0000000000000000
    (4 rows)
    

    SqlFiddle.