Postgresql (Аврора) Сумма из jsonb дает странную ошибку - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь суммировать значения из столбца типа jsonb в таблице в базе данных Aurora / Postgres, но, похоже, это не работает.

select (payload->>'loanAmount')::int from rfqs limit 1;

Дает результаты 10000 (int4).

select sum((payload->>'loanAmount')::int) from rfqs limit 1;

Дает результат: ERROR: invalid input syntax for integer: "2000.5"

Кажется, что это как-то связано с тем, как оператор - >> преобразует json в строку, но это как-точто-то не так с этой строкой, которая препятствует правильному приведению типа к int.

В качестве теста я выполнил select SUM(('10000'::int));, который работал нормально и вернул 10000, как и ожидалось.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Некоторые из ваших свойств loanAmount не имеют целочисленного значения.Тем не менее, первая запись.

Чтобы найти следующие записи:

SELECT payload FROM rfqs WHERE (payload->>'loanAmount') <> trunc(payload->>'loanAmount')
0 голосов
/ 12 июня 2018

Это позволит вам понять (вы увидите, в чем проблема с ":: int")

select sum(payload->>'loanAmount') from rfqs

, что совпадает с:

select sum(payload->>'loanAmount') from rfqs limit 1

(Anагрегирование без группировки по возврату только по строке, поэтому «предел 1» немного избыточен)

Попробуйте

SELECT sum(to_number((payload->>'loanAmount'),'999999999D9999')) from rfqs

см. http://www.sqlfiddle.com/#!17/9c30a/8

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...