在Postgresql中查找具有JSON值最高的对象
问题描述:
假设我们在数据库中有几个对象,属性为data
,其中属性data
包含:{'gender' => {'male' => 40.0, 'female' => 30.0 => 'undefined' => 30.0}}
。在Postgresql中查找具有JSON值最高的对象
我只想找到这些对象,其中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)
'选择从your_table *其中 '男性'=(从选择json_each_text K(DATA- >'gender')as j(k,v)order by v :: numeric desc limit 1);' – Abelisto