遍历 PostgresQL 中的 json 字段
Traverse through a json field in PostgresSQL
我有一个名为 all_measures 的 table,它有一个名为 measures 的字段,其中包含一个 json 结构
{ "Composition" : { "Sales" : 85, "Trend" : 64, "Index" : 76, "Week" : 61 }, "Stores" : { "Sales" : 85, "Trend" : 64, "Index" : 76, "Week" : 61 }, "Online" : { "Sales" : 85, "Trend" : 64, "Index" : 76, "Week" : 61 } }
我想遍历此 json 并在 2 列中包含路径和 kpi。
这就是我 SQL 的能力。
SELECT json_object_keys(fct.measures) path,
json_object_keys(fct.measures::json->'Online') kpi
FROM all_measures market fct
结果:
path | kpi
------------------------+------------------------
Composition | Sales
Stores | Trend
Online | Index
| Week
这就是我想要实现的目标。我如何得到这个结果?
path | kpi
------------------------+------------------------
Composition | Sales
Composition | Trend
Composition | Index
Composition | Week
Stores | Sales
Stores | Trend
Stores | Index
Stores | Week
Online | Sales
Online | Trend
Online | Index
Online | Week
使用 cross join
SELECT m.path, x.kpi
FROM all_measures fct
cross join jsonb_each(fct.measures) as m(path,v)
cross join jsonb_each (m.v) as x(kpi,val)
order by m.path
将 json_object_keys()
与第一个 运行 重复使用:
SELECT
path,
kpi
FROM mytable,
json_object_keys(mydata) as path,
json_object_keys(mydata -> path) as kpi
我有一个名为 all_measures 的 table,它有一个名为 measures 的字段,其中包含一个 json 结构
{ "Composition" : { "Sales" : 85, "Trend" : 64, "Index" : 76, "Week" : 61 }, "Stores" : { "Sales" : 85, "Trend" : 64, "Index" : 76, "Week" : 61 }, "Online" : { "Sales" : 85, "Trend" : 64, "Index" : 76, "Week" : 61 } }
我想遍历此 json 并在 2 列中包含路径和 kpi。
这就是我 SQL 的能力。
SELECT json_object_keys(fct.measures) path,
json_object_keys(fct.measures::json->'Online') kpi
FROM all_measures market fct
结果:
path | kpi
------------------------+------------------------
Composition | Sales
Stores | Trend
Online | Index
| Week
这就是我想要实现的目标。我如何得到这个结果?
path | kpi
------------------------+------------------------
Composition | Sales
Composition | Trend
Composition | Index
Composition | Week
Stores | Sales
Stores | Trend
Stores | Index
Stores | Week
Online | Sales
Online | Trend
Online | Index
Online | Week
使用 cross join
SELECT m.path, x.kpi
FROM all_measures fct
cross join jsonb_each(fct.measures) as m(path,v)
cross join jsonb_each (m.v) as x(kpi,val)
order by m.path
将 json_object_keys()
与第一个 运行 重复使用:
SELECT
path,
kpi
FROM mytable,
json_object_keys(mydata) as path,
json_object_keys(mydata -> path) as kpi