簡體   English   中英

可以使用postgres獲取json數組中的平均值嗎?

[英]Can get an average of values in a json array using postgres?

postgres的一大優點是它允許索引到json對象

我有一列數據格式有點像這樣:

{"Items":
  [
    {"RetailPrice":6.1,"EffectivePrice":0,"Multiplier":1,"ItemId":"53636"},
    {"RetailPrice":0.47,"EffectivePrice":0,"Multiplier":1,"ItemId":"53404"}
  ]
}

我想做的是找到包含這些數據的每行的平均RetailPrice。

就像是

select avg(json_extract_path_text(item_json, 'RetailPrice')) 

但實際上我需要為json對象中的每個項目執行此操作。 因此,對於此示例,查詢的單元格中的值將為3.285

我怎樣才能做到這一點?

可以像這樣工作:

WITH cte(tbl_id, json_items) AS ( 
   SELECT 1
        , '{"Items": [
       {"RetailPrice":6.1,"EffectivePrice":0,"Multiplier":1,"ItemId":"53636"}
      ,{"RetailPrice":0.47,"EffectivePrice":0,"Multiplier":1,"ItemId":"53404"}]}'::json
   )
SELECT tbl_id, round(avg((elem->>'RetailPrice')::numeric), 3) AS avg_retail_price
FROM   cte c
     , json_array_elements(c.json_items->'Items') elem
GROUP  BY 1;

CTE只是替代了一個表:

CREATE TABLE tbl (
   tbl_id     serial PRIMARY KEY
 , json_items json
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM