我有一个属性表,其中一个包含11个数字元素的json数组。我需要对json数组中的数据进行一些聚合(没什么花哨,只是平均值,最大/最小统计数据等)。
发现的广义答案here看起来非常适合将数据重新格式化为临时视图以便快速查询。我将jsonb_each更改为son_each(也许这会起作用?)并且不返回任何错误,但最后会出现一个标题为'create_jsonb_pivot_view'且没有数据的列。
这是功能:
create or replace function create_jsonb_pivot_view
(table_name text, regular_columns text, json_column text)
returns void language plpgsql as $$
declare
s text;
begin
execute format ($fmt$
select string_agg(format('%s->>''%s'' "%s"', key, key), ',')
from (
select distinct key
from %s, json_each(%s)
order by 1
) s;
$fmt$, json_column, '%s', '%s', table_name, json_column)
into s;
execute format('
drop view if exists %s_view;
create view %s_view as
select %s, %s from %s',
table_name, table_name, regular_columns, s, table_name);
end $$;
最后使用该函数的查询:
select create_jsonb_pivot_view('table', 'A, B, C, D', 'params')
我之前从未使用SQL中的函数,所以这对我来说是一个新的领域。也许有一种不同的,更好的方式来实现我的目标?
答案 0 :(得分:0)
没关系实际工作 - 只需要花一点时间来处理这个功能。是要删除我的帖子,但如果这对其他人有用,我会留下它!