首页 > 解决方案 > 在 JSONB 列 POSTGRES 上选择 DISTINCT

问题描述

我正在尝试在存储 JSON 有效负载的 JSONB 列上运行选择不同计数查询查询,并且在正确处理它时遇到了无穷无尽的麻烦。

我设法从下面的有效负载中检索了数组 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 计数

提前感谢您的帮助。

标签: sqlpostgresqljsonb

解决方案


由于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')


推荐阅读