인프런 커뮤니티 질문&답변

hunter님의 프로필 이미지
hunter

작성한 질문수

장래쌤과 함께하는 쉽고 재미있는 SQL 이야기

array_agg 배열 해제

작성

·

21

0

안녕하세요

array_agg 처리해서 여러 값이 묶인 배열 형태로된 컬럼에 있는 값을

다시 꺼내는 방법이 있을까요?

답변 2

0

장래쌤님의 프로필 이미지
장래쌤
지식공유자

안녕하세요?

콤마로 구문된 값을 갖는 데이터에서 값들을 분리하는 방법을 문의한 것으로 이해했습니다.

아쉽게도 MySQL에는 이러한 기능을 갖는 함수가 아직 없습니다.

다른 DBMS에서는 쉽게 할 수 있는데, MySQL은 그렇지 않습니다.

이 기능을 구현하는 몇 가지 방법이 있는데,

그 중에서 JSON_TABLE을 사용하는 방법으로 예제를 만들어봤습니다.

아래 내용을 참고하시면 좋겠습니다.

-- 데이터 만들기
DROP TABLE IF EXISTS T1;
CREATE TABLE T1 (
	col1 int,
    col2 varchar(100)
);
INSERT INTO T1 VALUES (1, 'A,B,C,D,E,F,G');

-- 추출하기
SELECT js.value AS splited
    FROM t1,
    JSON_TABLE(CONCAT('["', 
               REPLACE(t1.col2, ',', '","'), '"]'), 
               "$[*]" COLUMNS (value VARCHAR(10) PATH "$")) AS js;
    
/*
splited
--------
A
B
C
D
E
F
G
*/

질문해 주셔서 감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. hunter님

SQL에서 array_agg와 같은 집계 함수를 사용하여 배열 형태로 데이터를 묶은 후, 이를 다시 분해해서 개별적인 값으로 가져오고 싶으실 때는 다양한 SQL 함수와 메소드를 사용할 수 있습니다. 다만, 이는 데이터베이스 시스템마다 지원되는 함수가 다를 수 있기 때문에 사용하고 있는 데이터베이스의 함수 사용법을 확인해야 합니다.

여러 SQL 플랫폼 중 PostgreSQL이나 MySQL 등에서는 여러 가지 방법으로 배열을 다시 해체하는 작업을 할 수 있습니다.

PostgreSQL

PostgreSQL에서는 unnest 함수를 사용하여 배열을 분해할 수 있습니다:

SELECT unnest(array_column) FROM your_table;

MySQL

MySQL에서는 JSON 형태로 배열을 다루고, JSON_TABLE 기능을 사용하여 이를 분해할 수 있습니다. MySQL에는 직접적인 배열 타입이 없으므로 주로 JSON 타입을 사용합니다.

위의 내용이 도움이 되었기를 바라며, 자세한 내용은 강의나 온라인 자료를 통해 추가적으로 확인하시면 좋겠습니다. 기본적으로 배열을 다루는 방법은 데이터베이스 시스템마다 조금씩 다를 수 있으니 사용하시는 시스템에 맞는 방법을 확인해 보세요.

관련 질문을 확인하시려면 다음 URL을 참조해 주시기 바랍니다: 질문 보기.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

hunter님의 프로필 이미지
hunter

작성한 질문수

질문하기