如何对PostgreSQL JSON字段进行排序
我有一些带有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_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