Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 JSON_OBJECTAGG()를 활용해 레코드를 키-값 쌍으로 표시하는 방법

MySQL에서 여러 레코드를 하나의 키-값(key-value) 쌍 형태로 묶어서 조회하고 싶다면 JSON_OBJECTAGG() 함수를 사용하면 됩니다. 이 함수는 지정한 두 개의 컬럼을 각각 '키'와 '값'으로 삼아, GROUP BY로 그룹화된 결과를 JSON 객체 형태로 집계해 줍니다.

실제 동작 과정을 예제와 함께 단계별로 살펴보겠습니다.

1. 샘플 테이블 생성

먼저 실습에 사용할 테이블을 만들어 보겠습니다.

mysql> create table DemoTable
(
    Id int,
    FirstName varchar(100),
    Age int
);
Query OK, 0 rows affected (0.56 sec)

2. 데이터 삽입

INSERT 명령어로 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable values(10,'John',23);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values(20,'Carol',21);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(10,'Sam',24);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values(20,'Chris',20);
Query OK, 1 row affected (0.13 sec)

3. 전체 레코드 확인

SELECT 문으로 저장된 모든 데이터를 조회합니다.

mysql> select *from DemoTable;

실행 결과는 다음과 같습니다.

+------+-----------+------+
| Id   | FirstName | Age  |
+------+-----------+------+
|   10 | John      |   23 |
|   20 | Carol     |   21 |
|   10 | Sam       |   24 |
|   20 | Chris     |   20 |
+------+-----------+------+
4 rows in set (0.00 sec)

4. JSON_OBJECTAGG()로 키-값 쌍 변환

이제 JSON_OBJECTAGG(FirstName, Age)를 사용하여 이름을 키로, 나이를 값으로 하는 JSON 객체를 Id별로 그룹화해 조회해 보겠습니다.

mysql> select Id,JSON_OBJECTAGG(FirstName,Age) from DemoTable GROUP BY Id;

실행 결과는 다음과 같습니다.

+------+-------------------------------+
| Id   | JSON_OBJECTAGG(FirstName,Age) |
+------+-------------------------------+
|   10 | {"Sam": 24, "John": 23}       |
|   20 | {"Carol": 21, "Chris": 20}    |
+------+-------------------------------+
2 rows in set (0.07 sec)

결과 해석

출력 결과를 보면 Id가 같은 레코드들이 하나의 행으로 병합되었고, FirstName 컬럼의 값은 JSON 객체의 , Age 컬럼의 값은 으로 매핑된 것을 확인할 수 있습니다.

  • Id = 10: {"Sam": 24, "John": 23}
  • Id = 20: {"Carol": 21, "Chris": 20}

이처럼 JSON_OBJECTAGG()는 여러 행의 데이터를 애플리케이션에서 바로 사용할 수 있는 JSON 구조로 손쉽게 변환해 주기 때문에, API 응답 생성이나 데이터 직렬화 작업에 매우 유용하게 활용됩니다. 참고로 이 함수는 MySQL 5.7.22 이상 버전에서 사용할 수 있습니다.