Извлечение ключа из значения объекта json в postgres

64
7

Скажем, у меня есть json-объект {'key1':0.5,'key2':0.3,'key3':0.1} в определенном столбце таблицы, называемой test. Я хочу вернуть ключ самого высокого значения. Чтобы получить максимальное значение, в postgres я могу написать этот запрос:

select greatest(column1->'key1',column1->'key2',column1->'key3') from test

Теперь он возвращает наибольшее значение. Но тот, который я хочу, - это ключ, связанный с самым высоким значением. Возможно ли это в postgres json-запросе?

спросил(а) 2021-01-19T14:04:39+03:00 6 месяцев назад
1
Решение
110

Вам нужно извлечь все пары ключ/значение в виде строк. Как только вы это сделали, это проблема greatest-n-per-group - без "группы", хотя вы смотрите на все строки.

select k,val
from (
select t.*, row_number() over (order by t.val::numeric desc) as rn
from jsonb_each_text('{"key1":0.5,"key2":0.3,"key3":0.1}'::jsonb) as t(k,val)
) t
where rn = 1;

Пример в Интернете: http://rextester.com/OLBM23414

ответил(а) 2021-01-19T14:04:39+03:00 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема