#sql #json #postgresql
#sql #json #postgresql
Вопрос:
У меня есть столбец как sensor_info, который имеет столбец типа jsonb. Столбец может содержать следующее
{"temp":54, "humidity":34}
{"pressure":34}
{"switch":"on"}
{"temp":60, "humidity":78}
Это может рассматриваться как несколько записей одного столбца. В этих записях я должен сгруппировать их в один столбец с последним значением ключа.
Нравится-
{"temp":60, "humidity":78, "pressure":34, "switch":"on"}
Я пытался, json_agg
но он возвращает что-то вроде [{"temp":54, "humidity":34},{"pressure":34},{"switch":"on"},{"temp":60, "humidity":78}]
Комментарии:
1. Я использую postgresql
Ответ №1:
Для этого нет встроенной функции. Но вы можете легко определить свой собственный:
create aggregate jsonb_merge_agg(jsonb)
(
sfunc = jsonb_concat(jsonb, jsonb),
stype = jsonb
);
Затем вы можете использовать его следующим образом:
select jsonb_merge_agg(sensor_info)
from the_table;
Значение JSON может содержать каждый ключ только один раз, и в совокупности будет сохранен «последний». Если вы хотите контролировать, какой ключ является «последним», вам нужно и порядок, например jsonb_merge_agg(sensor_info order by created_at)
Комментарии:
1. Это фактически решило мою проблему, спасибо. А также спасибо за руководство.