RE: Wildcarding json keys in json query - Mailing list pgsql-general

From Patrick FICHE
Subject RE: Wildcarding json keys in json query
Date
Msg-id VI1PR05MB5917CD75D5EA4CF82DD89ABAEF689@VI1PR05MB5917.eurprd05.prod.outlook.com
Whole thread Raw
In response to Wildcarding json keys in json query  (David Gauthier <davegauthierpg@gmail.com>)
List pgsql-general

I guess you could try something like this

 

SELECT * FROM ( SELECT * from json_each(( '{

                                              "ports" : {

                                                  "port_abc":{"min": 5, "max": 7, "mean": 6},

                                                  "port_def":{"min": 5, "max": 9, "mean": 7},

                                                  "port_ghi":{"min": 6, "max": 10, "mean": 8}

                                                  }

                                              }'::json->'ports'

                                        ))

              ) T

WHERE (value::json->>'mean')::float >= 7;

 

From: David Gauthier <davegauthierpg@gmail.com>
Sent: Tuesday, November 30, 2021 9:40 PM
To: Postgres General <pgsql-general@postgresql.org>
Subject: Wildcarding json keys in json query

 

PG 11.5 on linux

 

Let's say I store a jsonb in a column called test_results that looks like this...

 

{

ports : {

    port_abc:{min: 5, max: 7, mean: 6},

    port_def:{min: 5, max: 9, mean: 7},

    port_ghi:{min: 6, max: 10, mean: 8}

    }

}

 

And I want to to get all the port names where the mean is >= 7.

 

This works...

 

select 1 from mytbl where cast(test_results#>'{ports,port_abc,mean}' as float) >= 7 ;

 

But I want all the ports that have mean >= 7.

Something akin to...

 

select 1 from mytbl where cast(test_results#>'{ports,*,mean}' as float) >= 7 ;

 

But the "*" doesn't work :-(

Any ideas ?
Thanks!

pgsql-general by date:

Previous
From: Peter Eisentraut
Date:
Subject: Re: Issues cross-compiling libpq 14.x to MacOS armv8
Next
From: Frank Limpert
Date:
Subject: Re: case insensitive collation of Greek's sigma