从postgres中的json对象的值中提取密钥

时间:2018-08-30 22:21:55

标签: sql json postgresql

让我们说我在名为test的表的特定列中有一个json对象{'key1':0.5,'key2':0.3,'key3':0.1}。我想返回最高值的键。为了获得最高的价值,在postgres中,我可以编写以下查询:

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

现在,它返回最大值。但是我想要的是与最高价值相关的钥匙。在postgres json查询中有可能吗?

1 个答案:

答案 0 :(得分:0)

您需要将所有键/值对提取为行。完成此操作后,这将是一个问题-尽管在查看所有行时都没有“组”。

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