2017-05-23 4 views
0

를 사용하여 SQL 쿼리의 데이터를 포맷하는 방법 : 위치 테이블에나는 테이블 이름이 포스트 그레스

colums => location, ltn,lgn

데이터 :

Banguluru, 22,24, 
Banguluru, 22,25 
Banguluru, 22,26 
Hyderabad, 22,27 

내가 출력과 같이합니다 :

{ 
    location: 'Hyderabad', 
     positions : [ 
      position : { 
       lat: 22, 
       lng: 27     
     }] 
    }, 
{ 
     location: 'Banguluru', 
     positions : [ 
      position : { 
       lat: 22, 
       lng: 24     
     }, position : { 
       lat: 22, 
       lng: 25 
     }, position : { 
       lat: 22, 
       lng: 26 
     }]} 

답변

0

샘플 :

t=# create table s170 (location text, ltn int,lgn int); 
CREATE TABLE 
t=# insert into s170 values ('Banguluru',24,25),('Banguluru',24,26),('Hyderabad',22,27); 
INSERT 0 3 

쿼리

t=# with b as (
    with a as (
    select location, (select to_json(position) from (select ltn,lgn) as position) as position 
    from s170 
) 
    select location,json_agg(position) as position 
    from a 
    group by location 
) 
select json_agg(b) 
from b; 
            json_agg 
---------------------------------------------------------------------------------- 
[{"location":"Hyderabad","position":[{"ltn":22,"lgn":27}]},      + 
    {"location":"Banguluru","position":[{"ltn":24,"lgn":25}, {"ltn":24,"lgn":26}]}] 
(1 row) 

또는 꽤에서 :

[ 
    { 
    "location": "Hyderabad", 
    "position": [ 
     { 
     "ltn": 22, 
     "lgn": 27 
     } 
    ] 
    }, 
    { 
    "location": "Banguluru", 
    "position": [ 
     { 
     "ltn": 24, 
     "lgn": 25 
     }, 
     { 
     "ltn": 24, 
     "lgn": 26 
     } 
    ] 
    } 
] 

내가 한 CTE 랩 생략 쉽게 할 수 있으리라 생각하지만 코드 명확성을 위해 여기에있을 수 있도록

갱신 9.2에 대한 해야합니다.

t=# with b as (
    with a as (
    select location, (select row_to_json(position,true) from (select ltn,lgn) as position) as position 
    from s170 
) 
    select location,string_agg(position::text,',') as position 
    from a 
    group by location 
) 
select string_agg(concat('{"location":"',location,'","position":[',position,']}'), ',') 
from b; 
string_agg 
{"location":"Hyderabad","position":[{"ltn":22, 
"lgn":27}]},{"location":"Banguluru","position":[{"ltn":24, 
"lgn":25},{"ltn":24, 
"lgn":26}]} 
(1 row) 
+0

실제로 to_json json_agg이 내 포스트그레스에서 작동하지 않습니다. 9.2 – suresh

+0

예 - 9.3에서 작동합니다. 원래 게시물에 버전을 지정 했어야합니다. –