Select JSONB 列 POSTGRES 上的 DISTINCT
Select DISTINCT on JSONB column POSTGRES
我正在尝试 运行 在存储 JSON 有效负载的 JSONB 列上执行 select 不同计数查询查询,并且遇到了无穷无尽的麻烦没错。
我已经设法从下面的有效负载中检索了数组 EmployeeData 的计数,但其中有一个摘要对象和一个名为 FileNumber 的元素。 JSONB 存储在名为 event
的列中
"EmployeeData": [
{
"Summary": {
"FileNumber": "123456789",
"FamilyName": "test",
"FirstName": "test",
"OtherName": "",
"Pay": 7942.41,
"Amount": 26311.00,
"Other": 3000.00
},
]
我可以运行这个查询成功
select DISTINCT event -> 'EmployeeData' as Data from mobile.payrun
但是如果我尝试
select DISTINCT event -> 'EmployeeData' --> 'FileNumber' as Data from event_table
没用
有人可以让我知道应该使用什么查询来获取 FileNumber 元素上的 DISTINCT 计数
提前感谢您的帮助。
由于 EmployeeData
是一个数组,您需要处理该数组中可能存在的许多元素。为了得到它们(跨所有行),你需要取消嵌套数组:
select distinct d.element ->> 'FileNumber'
from event_table t
cross join jsonb_array_elements(t.even -> 'EmployeeData') as d(element);
如果您需要计数,请使用 count(distinct d.element ->> 'FileNumber')
我正在尝试 运行 在存储 JSON 有效负载的 JSONB 列上执行 select 不同计数查询查询,并且遇到了无穷无尽的麻烦没错。
我已经设法从下面的有效负载中检索了数组 EmployeeData 的计数,但其中有一个摘要对象和一个名为 FileNumber 的元素。 JSONB 存储在名为 event
的列中"EmployeeData": [
{
"Summary": {
"FileNumber": "123456789",
"FamilyName": "test",
"FirstName": "test",
"OtherName": "",
"Pay": 7942.41,
"Amount": 26311.00,
"Other": 3000.00
},
]
我可以运行这个查询成功
select DISTINCT event -> 'EmployeeData' as Data from mobile.payrun
但是如果我尝试
select DISTINCT event -> 'EmployeeData' --> 'FileNumber' as Data from event_table
没用
有人可以让我知道应该使用什么查询来获取 FileNumber 元素上的 DISTINCT 计数
提前感谢您的帮助。
由于 EmployeeData
是一个数组,您需要处理该数组中可能存在的许多元素。为了得到它们(跨所有行),你需要取消嵌套数组:
select distinct d.element ->> 'FileNumber'
from event_table t
cross join jsonb_array_elements(t.even -> 'EmployeeData') as d(element);
如果您需要计数,请使用 count(distinct d.element ->> 'FileNumber')