Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgres json密钥计数_Json_Postgresql - Fatal编程技术网

Postgres json密钥计数

Postgres json密钥计数,json,postgresql,Json,Postgresql,给定N个包含json列的记录 |ID |Name |JSON |01 |TEST1 |{"key1" : "value1", "key2": "value2", "key4": "value4"} |02 |TEST1 |{"key1" : "value1"} |03 |TEST2 |{"key1" : "value1", "key2": "value2", "key3":"value3"} ... 计

给定N个包含json列的记录

|ID    |Name   |JSON                             
|01    |TEST1  |{"key1" : "value1", "key2": "value2", "key4": "value4"}
|02    |TEST1  |{"key1" : "value1"}
|03    |TEST2  |{"key1" : "value1", "key2": "value2", "key3":"value3"}
...
计算一组键的每个json值的出现次数的最佳策略是什么,例如,对于上面的示例,我将限制为key1、key2、key3和get:-

|value1|value2|value3|
|3     |2     |1     |
这些值将更改,因此我不想显式地查找它们

CREATE TABLE test (id INT4 PRIMARY KEY, some_name TEXT, j json);
copy test FROM stdin;
01  TEST1   {"key1" : "value1", "key2": "value2", "key4": "value4"}
02  TEST1   {"key1" : "value1"}
03  TEST2   {"key1" : "value1", "key2": "value2", "key3":"value3"}
\.
with unpacked as (
    SELECT (json_each_text(j)).* FROM test
)
SELECT value, count(*) FROM unpacked WHERE key in ('key1', 'key2', 'key3') group by value;
返回:

 value  | count 
--------+-------
 value1 |     3
 value3 |     1
 value2 |     2
(3 rows)
像你展示的那样返回它对我来说并不是一个好主意(如果有40亿个不同的值,你会怎么做?),但你可以始终在你的应用程序中旋转,或者修改查询以进行数据透视。

请跟我重复:如果我真正关心其中存储的内容,我不应该使用json、hstore、xml、eav或任何其他半结构化构造。重复:不要使用。(提示:修复您的模式,同时查看json函数。)