sql - 选择具有最大 JSON 键的对象

标签 sql json postgresql

给定一个名为 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/

相关文章:

sql - 如何在 PostgreSQL 中隐藏具有相同引用 ID 的不同行集

sql - SQL 中逗号分隔的列表

java - query.getResultList 处的 ClassCastException

SQL Server 在存储过程期间锁定表

javascript - 我们可以使用 Jquery 或 Javascript 从 .js 文件读取/写入 Json 数据吗?

json - 根据请求的内容提供 JSON 或 HTML?

ruby-on-rails - 如何在 Rails 应用程序和客户端之间共享数据(始终可用)

python - SQLAlchemy 自动加载插入记录

mysql - 从按集合分组的值中选择值

sql - 这种查询该怎么做呢?