У меня есть таблица с именем diary
, которая включает столбцы, перечисленные ниже:
| id | user_id | custom_foods |
|----|---------|--------------------|
| 1 | 1 | {"56": 2, "42": 0} |
| 2 | 1 | {"19861": 1} |
| 3 | 2 | {} |
| 4 | 3 | {"331": 0} |
Я бы хотел посчитать, сколько дневников имеют значения (custom_foods
) больше 0 у каждого пользователя.Меня не волнуют ключи, так как ключи могут быть любым числом в строке.
Желаемый вывод:
| user_id | count |
|---------|---------|
| 1 | 2 |
| 2 | 0 |
| 3 | 0 |
Я начал с:
select *
from diary as d
join json_each_text(d.custom_foods) as e
on d.custom_foods != '{}'
where e.value > 0
Я даже не знаю, правильный ли синтаксис.Теперь я получаю сообщение об ошибке:
ОШИБКА: функция json_each_text (текст) не существует
ЛИНИЯ 3: объедините json_each_text (d.custom_foods) как e
СОВЕТ: ни одна функция не соответствует заданному имени и типу аргумента.Возможно, вам потребуется добавить явные приведения типов.
Моя используемая версия: psql (10.5 (Ubuntu 10.5-1.pgdg14.04 + 1), сервер 9.4.19).Согласно документации PostgreSQL 9.4.19 эта функция должна существовать.Я так растерялся, что не знаю, как действовать дальше.
Потоки, на которые я ссылался: