The function json.filter(value,'r2') returns a JSON value, not a number.

You probably first need to convert the returned json value to a number, either via:

json."integer"( json.filter(value,'r2')) which returns a bigint

or

json.number( json.filter(value,'r2')) which returns a float

See also: https://www.monetdb.org/Documentation/Manuals/SQLreference/Types/JSON


On 21-11-2016 18:33, Lynn Carol Johnson wrote:
Hello all -

I’m having trouble pulling rows based on the value of a json key/value pair.  I have created a table with a json object that looks like this:

sql>\d testjson

CREATE TABLE "sys"."testjson" (

"chr"   INTEGER,

"pos"   INTEGER,

"value" JSON

);

sql>


I have entries in the table that look as below:


sql>select * from testjson;

+------+-----------+----------------------------------------------------------------+

| chr  | pos       | value                                                          |

+======+===========+================================================================+

|    1 | 209890809 | {"df":1,"pval":4.556021744872574E-6,"r2":0.0995066009518681}   |

|    1 | 789383847 | {"df":1,"pval":2.50962115178055E-6,"r2":0.10462833261259474}   |

|    2 | 127893782 | {"df":1,"pval":4.2825829011938765E-6,"r2":0.10003907080878045} |

|    2 | 234533212 | {"df":2,"pval":4.556021744872574E-6,"r2":0.0995066009518681}   |

+------+-----------+----------------------------------------------------------------+

4 tuples (1.027ms)

sql>


I would like to filter on json values.  Not the json key, the json key’s value.  I can pull json values based on a non-json field, e.g. Grab the pval where chr>1 as below:


sql>select json.filter(value,'r2') as r2Value from testjson where chr=1;

+-----------------------+

| r2value               |

+=======================+

| [0.0995066009518681]  |

| [0.10462833261259474] |

+-----------------------+

2 tuples (1.179ms)

sql>


But I want to pull chr/pos where pval < some amount, or df > some number.    For example, how would I write the query to select all rows where df > 1?  This query should return  the last row of the table above.  I’ve tried the following:

sql>select * from testjson where (json.filter(value,'df') > 1);

types json(0,0) and tinyint(8,0) are not equal

sql>


Thanks for your help - Lynn




_______________________________________________
users-list mailing list
users-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/users-list