【发布时间】:2014-08-27 16:07:08
【问题描述】:
我在 postgres 表中有一些数据,它是 json 数据数组的字符串表示形式,如下所示:
[
{"UsageInfo"=>"P-1008366", "Role"=>"Abstract", "RetailPrice"=>2, "EffectivePrice"=>0},
{"Role"=>"Text", "ProjectCode"=>"", "PublicationCode"=>"", "RetailPrice"=>2},
{"Role"=>"Abstract", "RetailPrice"=>2, "EffectivePrice"=>0, "ParentItemId"=>"396487"}
]
这是我数据库中单列相似数据的一个单元格中的数据。
这个存储在db中的数据类型是varchar(max)。
我的目标是找到每个带有“Role”=>“Abstract”的 json 项目的平均零售价格,包括数组中的所有 json 元素以及数据库中的所有行。
类似:
SELECT avg(json_extract_path_text(json_item, 'RetailPrice'))
FROM (
SELECT cast(json_items to varchar[]) as json_item
FROM my_table
WHERE json_extract_path_text(json_item, 'Role') like 'Abstract'
)
现在,由于某些原因,这个特定的查询显然无法正常工作。 Postgres 不允许您直接将 varchar 转换为 varchar[]。即使在我有一个数组之后,这个查询也不会对数组进行迭代。它可能还有其他问题,但我希望它有助于澄清我想要得到什么。
关于如何从数据库中所有这些 json 数据数组中获取平均零售价的任何建议?
【问题讨论】:
-
这很难,因为Redshift does not seem to support
generate_series()when tables are involved。如果每行有固定数量的 json 数组元素或至少一个较小的最大值,您可以即兴发挥 ... -
-
@Clodoaldo:我重新打开了这个。 不是重复,因为这是针对 Amazon Redshift 并且需要不同的解决方案。
-
@Erwin 为什么你认为另一个不是 Redshift?
-
Redshift 现在支持使用 json 路径文件进行 JSON 摄取 docs.aws.amazon.com/redshift/latest/dg/r_COPY.html
标签: sql arrays json postgresql amazon-redshift