из массива объктов, которые в jsonb храняться?
На это поле создан GIN индекс.
Пример, значений поля:
[
{"cpvCode": "39220000-0", "itemCost": 254.7, "specCode": null, "itemCount": 1.0, "itemDimension": "шт", "specificationName": "Губки кухнні"},
{"cpvCode": "12312000-2", "itemCost": 300, "specCode": null, "itemCount": 2.0, "itemDimension": "шт", "specificationName": "Блабла"}
]
(т.е. в каждом поле массив объектов)
Агрегировать нужно по cpvCode. В таблице миллионы записей, так что это должно работать еще и быстро. Нашел примеры агрегаций только по полю из объекта
with woo as (select 1 as id, now() as some_date, '[ { "cpvCode": "39220000-0", "itemCost": 254.7, "specCode": null, "itemCount": 1.0, "itemDimension": "шт", "specificationName": "Губки кухнні" }, { "cpvCode": "12312000-2", "itemCost": 300, "specCode": null, "itemCount": 2.0, "itemDimension": "шт", "specificationName": "Блабла" }, { "cpvCode": "12312000-2", "itemCost": 300, "specCode": null, "itemCount": 4.0, "itemDimension": "шт", "specificationName": "Блабла" } ]'::jsonb as attr) select id, some_date, attr_el ->> 'cpvCode', sum((attr_el ->> 'itemCost')::numeric * (attr_el ->> 'itemCount')::numeric) from woo, jsonb_array_elements(attr) attr_el group by id, some_date, attr_el ->> 'cpvCode';
Обсуждают сегодня