在Postgresql中查找JSON值最高的对象

在Postgresql中查找JSON值最高的对象,sql,json,postgresql,greatest-n-per-group,Sql,Json,Postgresql,Greatest N Per Group,假设我们在数据库中有两个包含属性数据的对象,其中属性数据包括:{'gender'=>{'male'=>40.0,'female'=>30.0=>'undefined'=>30.0}} 我只想找到这些对象,它们的gender=>male值最高 PostgreSQL 9.5假设我正确理解您的问题,示例输入/输出将非常有用: WITH jsons(id, j) AS ( VALUES (1, '{"gender": {"male": 40.0, "female": 30.0, "undef

假设我们在数据库中有两个包含属性数据的对象,其中属性数据包括:{'gender'=>{'male'=>40.0,'female'=>30.0=>'undefined'=>30.0}}

我只想找到这些对象,它们的gender=>male值最高


PostgreSQL 9.5

假设我正确理解您的问题,示例输入/输出将非常有用:

WITH jsons(id, j) AS (
  VALUES
    (1, '{"gender": {"male": 40.0, "female": 30.0, "undefined": 30.0}}'::json),
    (2, '{"gender": {"male": 40.0, "female": 30.0, "undefined": 30.0}}'),
    (3, '{"gender": {"male": 0.0, "female": 30.0, "undefined": 30.0}}')
)
SELECT id, j
FROM jsons
WHERE (j->'gender'->>'male') :: float8 = (
  SELECT MAX((j->'gender'->>'male') :: float8)
  FROM jsons
)
;
┌────┬───────────────────────────────────────────────────────────────┐
│ id │                               j                               │
├────┼───────────────────────────────────────────────────────────────┤
│  1 │ {"gender": {"male": 40.0, "female": 30.0, "undefined": 30.0}} │
│  2 │ {"gender": {"male": 40.0, "female": 30.0, "undefined": 30.0}} │
└────┴───────────────────────────────────────────────────────────────┘
(2 rows)
从您的_表中选择*其中'male'=从json_中选择k每个_textdata->'gender'作为jk,v order by v::numeric desc limit 1;