2017-04-25 4 views
1

Postgres에서 SQL을 사용하여 데이터를 가져오고 싶지만 JSON 결과로 이동하여 필요한 데이터 만 추출하고 싶습니다.JSON 내에서 데이터 선택

나는 (발렌 스튜디오에서) 작성하는 경우 : 내가 좋아하는 것이 무엇

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

는 단순히 :

Golf, M3 또는 "Golf", "M3"

처럼

Select "data" from "cars" 

첫 번째 행 보인다

그런 다음 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; 

도와 줘서 고마워!