ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [MySQL] group_concat 함수 알아보기
    Database/MySQL 2024. 3. 8. 21:54
    728x90
    반응형

     

    - 목차

     

    group_concat ?

    group_concat 함수는 MySQL 의 집계함수 중의 하나입니다.

    집계함수란 Group By 문장과 함께 쓰여져 나열되는 값들을 하나의 값으로 축소시키는 역할을 합니다.

    예를 들어서 List -> Item, Vector -> Scalar 와 같은 형식으로 Collection 타입의 값을 Single Item 값으로 변형할 수 있습니다.

    대표적으로 Max, Sum, Avg, Reduce 등이 존재하죠.

    Collection 의 여러 값들 중에서 최대, 최소, 평균, 합계 등을 계산하여 하나의 값으로 축소시킵니다.

     

    group_concat 은 이러한 Aggregation Function 으로 사용됩니다.

    동작 방식은 Collection 을 하나의 나열된 String 으로 반환합니다.

    예를 들어, 아래의 예시와 같이 collection 변수에 할당된 여러 String Variable 들은 group_concat 에 의해서 하나의 String 으로 변형됩니다.

    collection = ['Apple', 'Banana', 'Cocoa', 'Durian']
    
    group_concated_result = 'Apple,Banana,Cocoa,Durian'

     

    실습.

     

    간단한 실습을 위해서 Table 하나를 생성합니다.

    int 타입의 id 와 varchar 타입의 name 을 칼럼으로써 가지는 People 이라는 Table 입니다.

    create table People (id int, name varchar(32));

     

    동일한 name 을 가지는 3개의 Row 들을 생성합니다.

    insert into People(id, name) values (1, 'Andy'), (2, 'Andy'), (3, 'Andy');

     

    그리고 group_conat 을 적용하게 되면, 아래와 같이 "1,2,3" 이라는 문자열이 반환됩니다.

    select group_concat(id) from People;

     

    +------------------+
    | group_concat(id) |
    +------------------+
    | 1,2,3            |
    +------------------+
    1 row in set (0.01 sec)

     

    group_concat 의 결과물은 하나의 문자열이기 때문에 upper 과 같은 문자열 처리 함수가 사용될 수 있습니다.

    select upper(group_concat(name)) from People;

     

    +---------------------------+
    | upper(group_concat(name)) |
    +---------------------------+
    | ANDY,ANDY,ANDY            |
    +---------------------------+
    1 row in set (0.01 sec)

     

     

    Separator, Delimiter 적용하기.

    group_concat 은 합쳐지는 문자열들 사이에 Separator 를 적용합니다.

    사용되는 기본적인 Separator 는 comma (,) 를 사용하며,

    SEPARATOR 키워드를 적용하여 Separator 다른 문자열로 변경할 수 있습니다.

    "|" 를 Separator 로써 적용하는 예문은 아래와 같습니다.

     

    select group_concat(name SEPARATOR '|') from People;
    +----------------------------------+
    | group_concat(name SEPARATOR '|') |
    +----------------------------------+
    | Andy|Andy|Andy                   |
    +----------------------------------+
    1 row in set (0.00 sec)

     

     

    반응형

    'Database > MySQL' 카테고리의 다른 글

    [MySQL] foreign_key_checks 알아보기  (0) 2024.03.26
Designed by Tistory.