반응형
PostgreSQL은 JSON 데이터를 효율적으로 처리할 수 있는 기능을 제공합니다. json_build_object와 json_agg는 JSON 데이터를 생성하고 집계하는 데 매우 유용합니다.
이 글에서는 두 함수를 사용하는 방법과 예제를 통해 이를 이해하는 데 도움을 드리겠습니다.
1. json_build_object: JSON 객체 생성
-json_build_object 함수는 키-값 쌍으로 구성된 JSON 객체를 생성합니다. 키와 값은 동적으로 설정할 수 있으며, 다양한 데이터 타입을 지원합니다.
1) 사용법
json_build_object(key1, value1 [, key2, value2, ...])
2) 예제 1: 단순 JSON 객체 생성
SELECT json_build_object('name', '홍길동', 'age', 29, 'city', 'Seoul');
3) 예제 2: 컬럼 데이터를 JSON 객체로 변환
CREATE TABLE scheduler.tbl_test (
id SERIAL PRIMARY KEY,
name TEXT,
age INT
);
INSERT INTO scheduler.tbl_test (name, age) VALUES
('홍길동', 25),
('세종대왕', 30);
SELECT json_build_object('id', id, 'name', name, 'age', age) AS user_info
FROM scheduler.tbl_test;
-- 결과:
-- {"id" : 1, "name" : "홍길동", "age" : 25}
-- {"id" : 2, "name" : "세종대왕", "age" : 30}

2. json_agg: JSON 배열 생성
-json_agg 함수는 여러 행의 데이터를 JSON 배열로 집계합니다. SELECT 결과를 배열 형태로 변환할 때 유용합니다.
1) 사용법
json_agg(expression)
2) 예제 1: 단순 배열 생성
SELECT json_agg(name) FROM scheduler.tbl_test;
-- 결과: ["홍길동", "세종대왕"]

3) 예제 2: JSON 객체 배열 생성
SELECT json_agg(json_build_object('id', id, 'name', name, 'age', age)) AS users_array
FROM scheduler.tbl_test;
-- 결과:
-- [{"id" : 1,"name" : "홍길동", "age" : 25 },
-- {"id" : 2, "name" : "세종대왕", "age" : 30 }]

3. 두 함수 결합하기
-json_build_object와 json_agg를 결합하면 더 복잡한 JSON 구조를 생성할 수 있습니다.
1) 예제: 그룹화된 JSON 데이터 생성
CREATE TABLE scheduler.tbl_test_order (
user_id INT,
order_id SERIAL,
product TEXT,
quantity INT
);
INSERT INTO scheduler.tbl_test_order (user_id, product, quantity) VALUES
(1, 'Laptop', 1),
(1, 'Mouse', 2),
(2, 'Keyboard', 1);
SELECT json_build_object(
'user_id', user_id,
'orders', json_agg(json_build_object('order_id', order_id, 'product', product, 'quantity', quantity))
) AS user_orders
FROM scheduler.tbl_test_order
GROUP BY user_id;
-- 결과:
-- {
-- "user_id": 1,
-- "orders": [
-- {"order_id": 1, "product": "Laptop", "quantity": 1},
-- {"order_id": 2, "product": "Mouse", "quantity": 2}
-- ]
-- }
-- {
-- "user_id": 2,
-- "orders": [
-- {"order_id": 3, "product": "Keyboard", "quantity": 1}
-- ]
-- }

반응형
'개발이야기 > PostgreSQL' 카테고리의 다른 글
[PostgreSQL] DATE_PART 함수 사용법, 예제, 활용하기 (0) | 2025.02.05 |
---|---|
[PostgreSQL] division by zero 에러 해결하기 (CASE문, NULLIF, COALESCE) (0) | 2024.08.02 |
[PostgreSQL] ORDER BY 특정 순서로 먼저 정렬 하기 (ORDER BY CASE WHEN, ORDER BY CASE WHEN IN (0) | 2024.07.17 |
[PostgreSQL] Function IF문 / CASE문 사용방법, 예제 (2) | 2024.01.23 |
[PostgreSQL] Function 동적 페이징 처리하기 (LIMIT, OFFSET) (0) | 2024.01.05 |
댓글