我有一个带有jsonb列“元数据”的表。在元数据列中有多个键值对,因此表的格式如下:
hash metadata
1 {"type": ["A, B"], "Name": ["One"]}
2 {"type": ["A, B, C"], "Name": ["Two"]}
3 {"type": ["B, C"], "Name": ["Three"]}
4 {"type": ["B"], "Name": ["Four"]}
我正在尝试查询表,以获取包含每种唯一类型的元素的数量,例如:
type : count
"A" : 2
"B" : 4
"C" : 2
我浏览了Postgres 9.6文档和许多其他堆栈溢出线程,并尝试了几件事,而我能找到的最接近的是这样的东西:
Select jsonb_array_elements(t.metadata -> 'Type') as type, count(DISTINCT t.hash)
FROM table AS t
GROUP BY type
返回:
type : count
"A, B" : 1
"A, B, C" : 1
"B, C" : 1
"B" : 1
在postgresql中有什么方法可以做到吗?
谢谢
答案 0 :(得分:1)
您的元数据列格式不正确。现在,它是一个由1个项目组成的数组,当应为["A, B"]
["A", "B"]
如果您无法修复该列中的数据,则可以在select中围绕您的类型添加一些其他函数调用
Select unnest(string_to_array(jsonb_array_elements(t.metadata -> 'Type'), ', ')) as type, count(DISTINCT t.hash)
FROM table AS t
GROUP BY type