2

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

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

我想以我为每个键和类别获得平均排名的方式查询数据

例如,

  • 键 1,类别 10,avg_rank:95
  • 键 1,类别 20,avg_rank:75
  • 键 2,类别 11,av​​g_rank:105
  • 键 2,类别 12,avg_rank:80
  • 任何有关如何在 Postgres 上执行此操作的帮助或良好参考将不胜感激:)

    4

    1 回答 1

    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。

    于 2018-07-22T12:33:04.737 回答