sql - 在 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 计数
提前感谢您的帮助。
解决方案
由于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')
推荐阅读
- java - 打印以下 1 2 3 4 Bus 6 7 8 9 bUs 11 12 13 14 bus
- sorting - 整数排序算法
- python-3.x - 即使我只有一个 Tkinter 窗口,复选框总是返回 false?
- amazon-web-services - 我可以在 AWS S3 托管网站中包含 Routes 和 Node_modules
- groovy - 将来自 Groovy 的 matchesJsonPath 注入 Spring Cloud Contract
- linux - 由于“错误:无法计算目标文件的后缀”,从 bash 脚本运行 ./configure 失败
- react-native - 如何从弹出的 Expo 项目中删除“android.hardware.location”权限请求?
- parse-platform - 不使用 ObjectId (JS) 保存对象(如果不存在)
- javascript - 从 JSX 按钮调用另一个文件的类函数
- javascript - ReactJS - 使用 redux-saga 发送一个空对象