2016-11-24 47 views
1

假设我们在数据库中有几个对象,属性为data,其中属性data包含:{'gender' => {'male' => 40.0, 'female' => 30.0 => 'undefined' => 30.0}}在Postgresql中查找具有JSON值最高的对象

我只想找到这些对象,其中gender => male值最高。

的PostgreSQL 9.5

+1

'选择从your_table *其中 '男性'=(从选择json_each_text K(DATA- >'gender')as j(k,v)order by v :: numeric desc limit 1);' – Abelisto

回答

1

假设我正确理解您的问题(例如输入/输出将是有用的):

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)