반응형
개체의 JSON 배열과 동일한 행의 여러 열을 반환합니다.
다음 테이블이 있습니다MyTable:
id │ value_two │ value_three │ value_four
────┼───────────┼─────────────┼────────────
1 │ a │ A │ AA
2 │ a │ A2 │ AA2
3 │ b │ A3 │ AA3
4 │ a │ A4 │ AA4
5 │ b │ A5 │ AA5
개체 배열을 쿼리하고 싶다.{ value_three, value_four }그룹화value_two.value_two그 결과 스스로 존재해야 합니다.결과는 다음과 같습니다.
value_two │ value_four
───────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
a │ [{"value_three":"A","value_four":"AA"}, {"value_three":"A2","value_four":"AA2"}, {"value_three":"A4","value_four":"AA4"}]
b │ [{"value_three":"A3","value_four":"AA3"}, {"value_three":"A5","value_four":"AA5"}]
사용 여부는 중요하지 않습니다.json_agg()또는array_agg().
하지만 제가 할 수 있는 일은
with MyCTE as ( select value_two, value_three, value_four from MyTable )
select value_two, json_agg(row_to_json(MyCTE)) value_four
from MyCTE
group by value_two;
반환되는 내용:
value_two │ value_four
───────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
a │ [{"value_two":"a","value_three":"A","value_four":"AA"}, {"value_two":"a","value_three":"A2","value_four":"AA2"}, {"value_two":"a","value_three":"A4","value_four":"AA4"}]
b │ [{"value_two":"b","value_three":"A3","value_four":"AA3"}, {"value_two":"b","value_three":"A5","value_four":"AA5"}]
엑스트라 포함value_two오브젝트 키를 눌러서 삭제하겠습니다.사용해야 하는 SQL(Postgres) 쿼리를 선택하십시오.
json_build_object() Postgres 9.4 이후
또는 되돌아가기 위해jsonb.
SELECT value_two, json_agg(json_build_object('value_three', value_three
, 'value_four' , value_four)) AS value_four
FROM mytable
GROUP BY value_two;
가변 인수 목록에서 JSON 개체를 만듭니다.관례상 인수 리스트는 키와 값을 번갈아 사용하여 구성됩니다.
모든 버전(포함)포스트그레스 9.3)
row_to_json() 그런 표정을 지으면 효과가 있을 것이다.
SELECT value_two
, json_agg(row_to_json((value_three, value_four))) AS value_four
FROM mytable
GROUP BY value_two;
그러나 원래 열 이름은 손실됩니다.등록된 행 유형에 대한 캐스트는 이를 회피합니다(임시 테이블의 행 유형은 애드혹 쿼리에도 사용됩니다).
CREATE TYPE foo AS (value_three text, value_four text); -- once in the same session
SELECT value_two
, json_agg(row_to_json((value_three, value_four)::foo)) AS value_four
FROM mytable
GROUP BY value_two;
또는 서브셀렉트 대신 서브셀렉트를 사용합니다.ROW표현.좀 더 상세하게, 그러나 유형 캐스팅은 제외:
SELECT value_two
, json_agg(row_to_json((SELECT t FROM (SELECT value_three, value_four) t))) AS value_four
FROM mytable
GROUP BY value_two;
Craig 관련 답변에 대한 자세한 내용은 다음과 같습니다.
to_json with array_composite type
begin;
create table mytable(
id bigint, value_two text, value_three text, value_four text);
insert into mytable(id,value_two, value_three,value_four)
values
( 1, 'a', 'A', 'AA'),
(2, 'a' , 'A2' , 'AA2'),
(3, 'b' , 'A3', 'AA3'),
( 4, 'a' , 'A4', 'AA4'),
(5, 'b' , 'A5', 'AA5');
commit;
create type mytable_type as (value_three text, value_four text);
select value_two,
to_json( array_agg(row(value_three,value_four)::mytable_type))
from mytable
group by 1;
언급URL : https://stackoverflow.com/questions/26486784/return-multiple-columns-of-the-same-row-as-json-array-of-objects
반응형
'programing' 카테고리의 다른 글
| CosmosDB JSON with SQL - 노드에 필드가 있는지 확인합니다.JS (0) | 2023.02.23 |
|---|---|
| 기능적인 컴포넌트에서 React의 소품에서 제네릭스를 사용하는 방법 (0) | 2023.02.23 |
| withRouter'는 react-router-dom에서 내보내지 않습니다. (0) | 2023.02.23 |
| 같은 이름의 작업이 이미 있으므로 '래퍼' 작업을 추가할 수 없습니다. (0) | 2023.02.23 |
| 단일 페이지 응용 프로그램에서 응용 프로그램 버전 변경 감지 (0) | 2023.02.23 |