pg 테이블 data로 json 쿼리 출력 0 4 853

by 웅아 [2021.02.23 15:18:40]


버전은 PostgreSQL 10.15 입니다

테이블 A

컬럼 PD_YM, PROD_NAME, PD_PRCE 이 3가지 컬럼을 이용해

PD_YM PROD_NM PD_PRCE
2020-02 제품A 148668
2020-02 제품B 580009
2020-02 제품C 2072581
2020-02 제품D 3825335
2020-03 제품A 148668
2020-03 제품B 580009
2020-03 제품C 2072581
2020-03 제품D 3825335

아래와 같은 json 형식을 만들고 싶습니다.

{
  "year": "2020-02",
  "제품A": 148668,
  "제품B": 2072581  ,
  "제품C": 0
},

{
  "year": "2020-03",
  "제품A": 148668,
  "제품B": 2072581  ,
  "제품C": 0
},

by 마농 [2021.02.23 16:52:01]
SELECT JSON_AGG(a)
  FROM (SELECT pd_ym year
             , MIN(CASE prod_nm WHEN '제품A' THEN pd_prce END) 제품A
             , MIN(CASE prod_nm WHEN '제품B' THEN pd_prce END) 제품B
             , MIN(CASE prod_nm WHEN '제품C' THEN pd_prce END) 제품C
             , MIN(CASE prod_nm WHEN '제품D' THEN pd_prce END) 제품D
          FROM t
         GROUP BY pd_ym
         ORDER BY pd_ym
        ) a
;

 


by 웅아 [2021.02.23 18:25:11]

마농님 설명이 부족했습니다.. 제품이 고정이 아니라서요

{
  "year": "2020-02",
  "Imfinzi Liquid 120mg 1 X 2.4ml Vial": 148668,
  "TAGRISSO Tablets 40mg 4 X 7 Blister": 2072581  ,
  "Lynparza Tablets 100mg 7 x 8 blister": 0
},

년월별로 해서 제품명:값 이 만들어져야 합니다. 


by 마농 [2021.02.23 18:45:02]
-- PostgreSQL 이 깔려있지 않아 테스트는 못해봤습니다. 컨셉만 참고하세요. --
SELECT Array_to_String(Array_Agg(x ORDER BY pd_ym), ',') json
  FROM (SELECT pd_ym
             , CONCAT('{"year":"', pd_ym, '",'
               , Array_to_String(Array_Agg(
                 CONCAT('"', prod_nm, '":', pd_prce)
                 ORDER BY prod_nm), ',')
               , '}'
               ) x
          FROM t
         GROUP BY pd_ym
        ) a
;

 


by 웅아 [2021.02.23 19:28:10]

와 감사합니다 마농님

조금씩 수정하고 조립하여 드디어 완성 했습니다.

{"year:2020-02","TAGRISSO Tablets 40mg 4 X 7 Blister":2072581,"TAGRISSO Tablets 80mg 4 X 7 Blister":3825335,"Imfinzi Liquid 500mg 1 x 10ml Vial":580009,"Imfinzi Liquid 120mg 1 X 2.4ml Vial ":148668},
{"year:2020-03","TAGRISSO Tablets 80mg 4 X 7 Blister":3825335,"Imfinzi Liquid 120mg 1 X 2.4ml Vial ":148668,"TAGRISSO Tablets 40mg 4 X 7 Blister":2072581,"Imfinzi Liquid 500mg 1 x 10ml Vial":580009},
{"year:2020-04","Imfinzi Liquid 500mg 1 x 10ml Vial":1895865,"Lynparza Tablets 100mg 7 x 8 blister":1132679,"TAGRISSO Tablets 80mg 4 X 7 Blister":3825335,"Imfinzi Liquid 120mg 1 X 2.4ml Vial ":472605,"TAGRISSO Tablets 40mg 4 X 7 Blister":2072581,"Lynparza Tablets 150mg 7 x 8 blister":1415839},
{"year:2020-05","TAGRISSO Tablets 40mg 4 X 7 Blister":2072581,"Imfinzi Liquid 500mg 1 x 10ml Vial":1824946,"Lynparza Tablets 100mg 7 x 8 blister":1132679,"Lynparza Tablets 150mg 7 x 8 blister":1415839,"Imfinzi Liquid 120mg 1 X 2.4ml Vial ":465979,"TAGRISSO Tablets 80mg 4 X 7 Blister":3825335},

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입