sql - 从 Postgres 中的对象数组中选择一个包含特定字段的所有值的数组
问题描述
我有一个包含对象数组的列:
[{"name": "Sue", "job": "dev"}, {"name": "Bob", "job": "designer"}]
我想选择该列,但我只对“工作”字段的值感兴趣,所以我想要一个这样的数组:
["dev", "designer"]
我想有一种方法可以使用 JSON 运算符和函数来做到这一点,但我在这里找不到任何合适的东西:https ://www.postgresql.org/docs/10/functions-json.html 。我是否忽略了这些文档中的某些内容?还有另一种方法可以做到这一点吗?
解决方案
json_to_recordset 和 array_agg 应该可以解决您的问题:
select array_agg(job)
from myTable
cross join lateral
json_to_recordset(myTable.myJsonColumn) as t(name text, job text);
这是一个SQLFiddle 演示
注意:感谢 Tony 对数组的提醒。我错过了。
推荐阅读
- php - 将 id 连接到控制器内的 laravel 请求
- swift - 使用 Firestore 获取数据的问题
- c++ - 在 Visual Studio/C++ 中使用 fbx SDK 构建项目时出现编译错误
- node.js - Package.json 字段:不忽略子目录
- python - Django 模板查询集和过滤器
- google-apps-script - sendFormByEmail(e) 返回未定义
- node.js - Node js db.auth.find() 不是函数
- python - 文本比较中的错误值
- python - 对于相同列数的输入,SciKit Learn 转换管道输出列数不同
- java - 为什么不能简单地使用 arrayA = arrayB 在 Java 中复制数组