Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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
如何对PostgreSQL JSON字段进行排序_Sql_Postgresql_Sorting_Jsonb - Fatal编程技术网

如何对PostgreSQL JSON字段进行排序

如何对PostgreSQL JSON字段进行排序,sql,postgresql,sorting,jsonb,Sql,Postgresql,Sorting,Jsonb,我有一些带有json字段的表。我想对该字段进行分组和计数,以了解其使用频率。但是这个字段中的数据是以随机顺序存储的,所以我可能会得到错误的结果。这就是为什么我决定在分组之前对该字段进行排序,但我失败了。我怎么做 JSON_FIELD ["one", "two"] ["two"] ["two", "one"] ["two"] ["three"] 我尝试过以下代码: SELECT JSON_FIELD, COUNT(1) FROM my_table GROUP BY JSON_FIELD; 但没

我有一些带有json字段的表。我想对该字段进行分组和计数,以了解其使用频率。但是这个字段中的数据是以随机顺序存储的,所以我可能会得到错误的结果。这就是为什么我决定在分组之前对该字段进行排序,但我失败了。我怎么做

JSON_FIELD
["one", "two"]
["two"]
["two", "one"]
["two"]
["three"]
我尝试过以下代码:

SELECT JSON_FIELD, COUNT(1) FROM my_table GROUP BY JSON_FIELD;
但没有排序的结果是错误的:

JSON_FIELD     COUNT
["one", "two"] 1
["two"]        2
["two", "one"] 1
["three"]      1
但如果我能以某种方式对其进行排序,预期(和正确)结果将是:

JSON_FIELD     COUNT
["one", "two"] 2
["two"]        2
["three"]      1
我的问题对

来说很熟悉,但有点混乱,但有效:

SELECT ja::TEXT::JSON, COUNT(*)
FROM (
        SELECT JSON_AGG(je ORDER BY je::TEXT) AS ja
        FROM (
                SELECT JSON_ARRAY_ELEMENTS(j) je, ROW_NUMBER() OVER () AS r
                FROM (
                        VALUES
                        ('["one", "two"]'::JSON),
                        ('["two"]'),
                        ('["two", "one"]'),
                        ('["two"]'),
                        ('["three"]')
                ) v(j)
        ) el
        GROUP BY r
) x
GROUP BY ja::TEXT
结果:

顺便说一句,将JSON值转换为文本是因为(至少在第9.3页)没有JSON相等运算符,所以我转换为文本以便能够执行GROUP或order BY,然后返回JSON