как сумма столбцов группы по jsonḃ postgres - PullRequest
0 голосов
/ 25 июня 2018

Привет, у меня есть столбец jsnoḃ с этими значениями

proyectos:
nomḃre:character_varying
fecha:datetime
campos: jsonḃ

значение campos равно =

{"lista": [{"valor": "10", "nombre": "sueldo"}, {"valor": "20", "nombre": "sueldo"}, {"valor": "25", "nombre": "sueldo"}]}

Я запускаю этот запрос, но не работает

SELECT jsonb_array_elements(campos->'lista')->'nombre' as content,

       sum(((jsonb_array_elements(campos->'lista')->'valor'))::numeric) as cantidad
 FROM proyectos GROUP BY jsonb_array_elements(campos->'lista')->'nombre

Консоль покажет мне сообщение:

ERROR:  cannot cast type jsonb to numeric
LINE 3: ...((jsonb_array_elements(campos->'lista')->'valor'))::numeric)...
                                                             ^
********** Error **********

ERROR: cannot cast type jsonb to numeric
SQL state: 42846
Character: 137

Есть идеи?

1 Ответ

0 голосов
/ 25 июня 2018

Используйте функцию jsonb_array_elements() в боковом соединении, чтобы получить элементы массива как value, оператор ->>, чтобы получить объекты json в виде текста и преобразовать объекты valor в числовые.

select value->>'nombre' as nombre, sum((value->>'valor')::numeric)
from proyectos
cross join jsonb_array_elements(campos->'lista')
group by 1

 nombre | sum 
--------+-----
 sueldo |  55
(1 row) 
...