我有以下数据集:
{"date":{"year":2017,"month":7,"day":2},"data":{"param1":[10,20,30,440],"param2":[55,65,75,85],"param3":[43,55,71,72]}}
我从一个名为rawData的表中检索数据。
现在,我想要取消数组中的值的嵌套,并将它们放在另一个表(seperateData)中的4个单独的行和列中,因此对于这个示例,它将如下所示:
year | month | day | param1 | param2 | param3
2017 7 2 10 55 43
2017 7 2 20 65 55
2017 7 2 30 75 71
2017 7 2 440 85 72
我猜我必须使用unnest和ordinality来实现这一点,但我被困在了应该如何进行的问题上。数组param1、param2、param3的长度始终相同。
我已经摆弄了一下数据:https://www.db-fiddle.com/f/jZhYLEvdSERzLCDyoAJz65/0
发布于 2018-06-09 20:43:04
适当地,不是最好的方法,我的PostgreSQL体验不是很好,但它很有效。
查询
SELECT
((rawData.values)::json->'date')::json->'year' AS year
, ((rawData.values)::json->'date')::json->'month' AS month
, ((rawData.values)::json->'date')::json->'day' AS day
, JSON_ARRAY_ELEMENTS(((rawData.values)::json->'data')::json->'param1') AS param1
, JSON_ARRAY_ELEMENTS(((rawData.values)::json->'data')::json->'param2') AS param2
, JSON_ARRAY_ELEMENTS(((rawData.values)::json->'data')::json->'param3') AS param3
FROM
rawData
演示https://www.db-fiddle.com/f/jZhYLEvdSERzLCDyoAJz65/1
当数组param1、param2和param3的长度不相等时,查询也会起作用。
演示https://www.db-fiddle.com/f/jZhYLEvdSERzLCDyoAJz65/4
感谢你的回答,到目前为止,它是有效的。我唯一忘记的是,我实际上也需要索引作为一个单独的列。所以数组元素的索引。有什么想法吗?
通过将GENERATE_SERIES与JSON_ARRAY_LENGTH结合使用,这是可能的
查询
SELECT
((rawData.values)::json->'date')::json->'year' AS year
, ((rawData.values)::json->'date')::json->'month' AS month
, ((rawData.values)::json->'date')::json->'day' AS day
, JSON_ARRAY_ELEMENTS(((rawData.values)::json->'data')::json->'param1') AS param1
, GENERATE_SERIES(1, JSON_ARRAY_LENGTH(((rawData.values)::json->'data')::json->'param1')) AS param1_array_index
, JSON_ARRAY_ELEMENTS(((rawData.values)::json->'data')::json->'param2') AS param2
, GENERATE_SERIES(1, JSON_ARRAY_LENGTH(((rawData.values)::json->'data')::json->'param2')) AS param2_array_index
, JSON_ARRAY_ELEMENTS(((rawData.values)::json->'data')::json->'param3') AS param3
, GENERATE_SERIES(1, JSON_ARRAY_LENGTH(((rawData.values)::json->'data')::json->'param3')) AS param3_array_index
FROM
rawData
https://stackoverflow.com/questions/50773693
复制相似问题