計算JSONB密鑰數(shù)組的加權(quán)平均值

在我的一張表格中,我有以下結(jié)構(gòu):,

ID  LOG 
1   [{"x":12,"W":1}, {"x":24,"W":2}]
2   [{"x":14,"W":1.02}, {"x":20,"W":2.2}, {"x":11,"W":1.022}, {"x":45,"W":62.2}]

我在計算應用程序端x的加權(quán)平均值,我想創(chuàng)建一個名為weighted_avg_x的生成列,每當數(shù)據(jù)被附加到LOG列時,它都會被更新。有兩個問題可以用生成的列來解決嗎?我對jsonb符號計算sum(x*w)/sum(w)有點迷茫?

? 最佳回答:

您需要一個不可變函數(shù),可用于定義生成的列:

create or replace function get_weighted_avg_x(log jsonb)
returns numeric language sql immutable as
$$
    select sum((elem->'x')::numeric* (elem->'W')::numeric) / sum((elem->'W')::numeric)
    from jsonb_array_elements(log) as arr(elem)
$$;

alter table my_table add column weighted_avg_x numeric
    generated always as (get_weighted_avg_x(log)) stored;

這種解決方案在Postgres 12+中是可能的。在早期版本中,需要定義觸發(fā)器。

在db<>fiddle中測試它。

主站蜘蛛池模板: 国内自拍视频一区二区三区| 日本一区二区高清不卡| 国产精品亚洲一区二区三区 | 麻豆高清免费国产一区| 精品无码成人片一区二区98| 一区二区免费电影| 一区二区三区免费视频网站| 亚洲AV综合色一区二区三区 | 精品国产免费一区二区三区香蕉| 中文字幕亚洲一区| 日本一区午夜爱爱| 精品国产日韩一区三区| 亚洲日本一区二区| 精品久久国产一区二区三区香蕉 | 竹菊影视欧美日韩一区二区三区四区五区| 精品一区二区三区影院在线午夜| 一区二区三区日韩精品| 成人一区二区免费视频| 日韩精品无码一区二区三区免费 | 精品一区二区在线观看| 国产精品视频一区| 制服中文字幕一区二区| 久久se精品一区二区影院| 亚洲国产一区二区三区| 亚洲一区二区三区在线观看精品中文| 麻豆一区二区99久久久久| 亚洲欧洲一区二区| 伦精品一区二区三区视频| 亚洲国产一区二区视频网站| 精品少妇一区二区三区在线| 精品日产一区二区三区手机| 色偷偷久久一区二区三区| 成人国产一区二区三区| 亚洲乱码av中文一区二区| 中文字幕一区二区三区在线观看| 国产精品香蕉一区二区三区| 交换国产精品视频一区| 成人区人妻精品一区二区三区 | 精品一区二区三区免费观看| 成人精品一区二区三区校园激情 | 国产一区风间由美在线观看|