postgresql - JSONB - 嵌入数据中的子查询
问题描述
我正在使用 PostgreSQL (v11.6),它有一个包含以下值的JSONB列的表。列中可以有多个值,即可以有从 1 到 100 的 ID,例如 id:1 -100,我在示例中只显示了 2 个条目。
我目前有一个查询,它返回下面显示的列中每一行的元素数,效果很好。
SELECT jsonb_array_elements(my_column::jsonb) FROM my_table
我想获取每行满足特定条件的元素的数量,例如,其中 selected 不为 null,在此示例中,计数下方为 1。我已经对此进行了一段时间的研究,但还没有找到一种可靠的方法来安装过滤器。建议表示赞赏。
[
{
"id": 1,
"choices": [
{
"id": 100,
"misc_data": [
{
"id": 1000
},
{
"id": 1002
}
]
}
],
**"chosen": 2**
},
{
"id": 2,
"choices": [
{
"id": 200,
"misc_data": [
{
"id": 2002
},
{
"id": 2050
}
]
}
]
}
]
解决方案
您需要一个子查询来获取计数:
select ..., (select count(*)
from jsonb_array_elements(the_column) as x(e)
where x.e ? 'chosen') as chosen_count
from the_table
如果要检查特定值,可以使用:
select ..., (select count(*)
from jsonb_array_elements(the_column) as x(e)
where (x.e ->> 'chosen')::int > 0) as chosen_count
from the_table
推荐阅读
- docker - 如何在集群 ip 上设置私有注册凭据
- sql-server - SQL Server 2014 报告服务配置管理器崩溃
- outlook-redemption - 兑换 RDOSession 需要电子邮件程序吗?
- shell - 如何使用 shell 脚本获取 html 文件中的特定值
- html - 使用ajax asp.net从控制器加载带有数据的html页面
- c# - 从服务器端 Blazor 应用调用 API 时,用户声明始终为空
- javascript - vs代码终端控制台不使用javascript
- r - 在 R sommer v 4.1.1 中预测函数
- python - Python 和 xml.etree.ElementTree -
- javascript - 从字典中提取值(在 Node-RED 中)