如何在postgresql/plpgsql中将json转换为长格式table?
how to convert json into long format table in postgresql/plpgsql?
首先为使用图像道歉。但是我似乎无法 post 我的问题,因为我的格式似乎有问题所以我无法 post 我的问题,但我无法弄清楚哪里出了问题..
我有table这样的
table source
我想将其转换为如下结构
user_id
key
value
user_1
a
3
user_1
b
1
user_1
c
3
user_2
c
2
user_2
e
1
user_3
a
1
user_3
f
2
我目前使用下面的查询。但它有基于列出的 wtl_key a 到 e 的限制,而我无法列出所有可能的密钥,因为我不知道所有可能的密钥。我想查询捕获所有 json 键,可以是 aa、bb、zz 等
with wide_to_long_key AS (
select unnest(array['a','b','c','d','e']) as wtl_key
)
, data AS (
select
user_id
,details::json->'a' as a
,details::json->'b' as b
,details::json->'c' as c
,details::json->'d' as d
,details::json->'e' as e
)
select
user_id
,wtl_key
,case
when wtl_key='a' THEN a
when wtl_key='b' THEN b
when wtl_key='c' THEN c
when wtl_key='d' THEN d
when wtl_key='e' THEN e
when wtl_key='a' THEN a
end as value
from
data
CROSS JOIN
wide_to_long_key
如果 details 列的类型是 json 你可以使用 json_each_text
或者如果是 jsonb 你可以使用 jsonb_each_text
select
t.user_id,
e.*
from
test t
cross join json_each_text(t.details) e
首先为使用图像道歉。但是我似乎无法 post 我的问题,因为我的格式似乎有问题所以我无法 post 我的问题,但我无法弄清楚哪里出了问题..
我有table这样的 table source
我想将其转换为如下结构
user_id | key | value |
---|---|---|
user_1 | a | 3 |
user_1 | b | 1 |
user_1 | c | 3 |
user_2 | c | 2 |
user_2 | e | 1 |
user_3 | a | 1 |
user_3 | f | 2 |
我目前使用下面的查询。但它有基于列出的 wtl_key a 到 e 的限制,而我无法列出所有可能的密钥,因为我不知道所有可能的密钥。我想查询捕获所有 json 键,可以是 aa、bb、zz 等
with wide_to_long_key AS (
select unnest(array['a','b','c','d','e']) as wtl_key
)
, data AS (
select
user_id
,details::json->'a' as a
,details::json->'b' as b
,details::json->'c' as c
,details::json->'d' as d
,details::json->'e' as e
)
select
user_id
,wtl_key
,case
when wtl_key='a' THEN a
when wtl_key='b' THEN b
when wtl_key='c' THEN c
when wtl_key='d' THEN d
when wtl_key='e' THEN e
when wtl_key='a' THEN a
end as value
from
data
CROSS JOIN
wide_to_long_key
如果 details 列的类型是 json 你可以使用 json_each_text
或者如果是 jsonb 你可以使用 jsonb_each_text
select
t.user_id,
e.*
from
test t
cross join json_each_text(t.details) e