我的Postgres jsonb-foo并不是很好,但是我希望对我尝试进行的查询提供一些帮助。
我有一个基本查询,以提取_doc
的“答案”键中所有键的名称。 jsonb数据看起来像这样
_doc = {
"answers": {
"baz": true,
"qux": true
"other": "How do i find this"
}
}
,查询可能看起来像这样:
SELECT ss.foo, count(DISTINCT (ss.bar)) FROM (
SELECT (_doc::jsonb -> 'bar')::text as bar,
jsonb_object_keys(_doc::jsonb -> 'answers' -> 'foo') as foo
FROM public."table_name"
) ss
WHERE ss.foo IS NOT NULL
GROUP BY ss.foo;
实际上,这里的输出将是answers
的每个键出现的次数。
("baz" = 1, "qux" = 1, "other" = 1)
这是我的问题,除了other
之外,我想获取每个键出现的次数。在这种情况下,我想获取其内容出现的次数。所以我希望结果是
("baz" = 1, "qux" = 1, "How do i find this" = 1)
如果可能,我希望获得一些帮助构建此查询的帮助。
谢谢
答案 0 :(得分:1)
使用json_each_text()
函数获取键/值对。之后,取键或值other
,通过CASE
子句进行选择
SELECT
CASE WHEN elems.key = 'other' THEN elems.value
ELSE elems.key
END AS key,
COUNT(*)
FROM data,
json_each_text(jsondata -> 'answers') AS elems
GROUP BY 1