给定一个名为 test
的表,其定义如下
Column | Type | Modifiers
--------+------+-----------
a | json |
其中每一行都有一些格式类似于
的JSON{
"1": "abc",
"2": "def",
"3": "ghi"
}
如何进行查询以选择具有最大键的值? (在此示例中,您将选择 "ghi"
,因为它是键,3
是最大的)
我将其概念化的方式,理想情况下它是这样的查询:
SELECT a->max(json_object_keys(a)) from test;
但显然那是行不通的。这可能吗?
最佳答案
让我们尝试逐步解决这个问题:
tometzky=> select * from json_object_keys('{"1": "abc","2": "def","3": "ghi"}'::json) as k;
k
---
1
2
3
(3 rows)
tometzky=> select max(k) from json_object_keys('{"1": "abc","2": "def","3": "ghi"}'::json) as k;
max
-----
3
(1 row)
tometzky=> create temporary table test (a json);
tometzky=> insert into test values('{
"1": "abc",
"2": "def",
"3": "ghi"
}');
tometzky=> insert into test values('{
"100": "jkl",
"20": "kmo",
"3": "pqr"
}');
tometzky=> select (select max(k) from json_object_keys(a) as k) from test;
max
-----
3
3
(2 rows)
tometzky=> select (select max(k::int) from json_object_keys(a) as k) from test;
max
-----
3
100
(2 rows)
所以答案是:
tometzky=> select a->(select max(k::int)::text from json_object_keys(a) as k) from test;
?column?
----------
"ghi"
"jkl"
(2 rows)
我假设“具有最大键的值”是针对每一行的,否则它看起来不像是一个定义明确的问题。
关于sql - 选择具有最大 JSON 键的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43855498/