【问题标题】:Select DISTINCT on JSONB column POSTGRES在 JSONB 列 POSTGRES 上选择 DISTINCT
【发布时间】:2021-02-28 08:16:03
【问题描述】:

我正在尝试在存储 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 计数

提前感谢您的帮助。

【问题讨论】:

  • 'EmployeeData' --> 'FileNumber' :: 你有一个键“Summary”,所以这个引用可能是错误的。
  • 如果EmployeeData 数组中有多个元素怎么办?你想得到所有这些吗?还是只是第一个?

标签: sql postgresql jsonb


【解决方案1】:

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

【讨论】:

  • 谢谢,我会试一试:)
猜你喜欢
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 2010-11-01
  • 1970-01-01
  • 2021-10-19
  • 1970-01-01
  • 2021-05-20
  • 1970-01-01
相关资源
最近更新 更多