ошибка оператора деления в PostgreSql: оператор не существует: неизвестно / - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть таблица Trip в PostgreSQL DB, в таблице есть столбец с именем meta.

Пример meta в одной строке выглядит так:

meta = {"runTime": 3922000, "distance": 85132, "duration": 4049000, "fuelUsed": 19.595927498516176}

Чтобы выбрать поездку с наибольшим значением, разделенным на «расстояние» и «время выполнения», я запускаю запрос:

select MAX(tp."meta"->>'distance'/tp."meta"->>'runTime') maxkph FROM "Trip" tp

, но получаю ОШИБКУ:

/* ERROR:  operator does not exist: unknown / jsonb LINE 1: MAX(tp."meta"->>'distance'/tp."meta"...

Я также попытался:

select MAX((tp."meta"->>'distance')/(tp."meta"->>'runTime')) maxkph FROM "Trip" tp

, но получил еще одну ОШИБКУ:

/* ERROR:  operator does not exist: text / text LINE 1: ...MAX((tp."meta"->>'distance')/(tp."meta...

Не могли бы вы помочь мне решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 30 апреля 2020

Нет оператора div для значений jsonb. Вы должны привести значения обоих размеров к какому-то типу чисел c:

MAX( ((tp."meta"->>'distance')::numeric) / ((tp."meta"->>'runTime')::numeric) ) maxkph
1 голос
/ 30 апреля 2020

Попробуйте использовать скобки:

MAX( (tp."meta"->>'distance') / (tp."meta"->>'runTime') ) as maxkph

Ваша вторая проблема предполагает, что эти значения хранятся в виде строк. Так что конвертируйте их:

MAX( (tp."meta"->>'distance')::numeric / (tp."meta"->>'runTime')::numeric ) as maxkph
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...