2017-04-25 10 views
1

私はPostgreSQLでSQLを使用してデータを取得したいのですが、JSONの結果に行き、必要なデータのみを抽出したいと思います。JSON内のデータの選択

私は(ヴァレンティナスタジオで)書いた場合:

Select "data" from "cars" 

最初の行は次のようになります。私が望む何

[{"Model": "Golf", "Make": "VW", "Engine": "2.9"}, 
{"Model": "M3", "Make": "BMW", "Engine": "3.0"}] 

は単純です:

Golf, M3または"Golf", "M3"

その後、私は012と同じ方法を使うこともできましたまたは"Engine"

本質的に私の結果はJSONではありません。

答えて

1

使用json_array_elements():上記Iから

select obj->'Model' as model, obj->'Make' as make, 
obj->'Engine' as engine from data n, jsonb_array_elements(n.DATA) as obj 

with cars(data) as (
values 
    ('[ 
     {"Model": "Golf", "Make": "VW", "Engine": "2.9"}, 
     {"Model": "M3", "Make": "BMW", "Engine": "3.0"} 
    ]'::json) 
) 

select 
    elem->>'Model' as model, 
    elem->>'Make' as make, 
    elem->>'Engine' as engine 
from cars, 
lateral json_array_elements(data) elem 

model | make | engine 
-------+------+-------- 
Golf | VW | 2.9 
M3 | BMW | 3.0 
(2 rows)  
2
SELECT string_agg(x->>'Model', ',') 
FROM cars 
    CROSS JOIN LATERAL 
     jsonb_array_elements(data) x 
GROUP BY cars; 

┌────────────┐ 
│ string_agg │ 
├────────────┤ 
│ Golf,M3 │ 
└────────────┘ 
(1 row) 
0

私はまた私が望んでいた(そしてそれを私が行うことを計画していた方法で溶融)とは何だと思いますまた、使用することができます:

select 
    elem->>'Model' as model, 
    elem->>'Make' as make , 
    elem->>'Engine' as engine 
from cars, 
lateral jsonb_array_elements(data) elem; 

助けてくれてありがとう!

関連する問題