ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • GROUP_CONCAT
    개발/Database 2019. 5. 30. 18:25

    ☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
    mysql> help group_concat

    Name: 'GROUP_CONCAT'
    Description:
    Syntax:
    GROUP_CONCAT(expr)

    This function returns a string result with the concatenated non-NULL
    values from a group. It returns NULL if there are no non-NULL values.
    The full syntax is as follows:

    GROUP_CONCAT([DISTINCT] expr [,expr ...]
                 [ORDER BY {unsigned_integer | col_name | expr}
                     [ASC | DESC] [,col_name ...]]
                 [SEPARATOR str_val])

    URL: http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

    Examples:
    mysql> SELECT student_name,
        ->     GROUP_CONCAT(test_score)
        ->     FROM student
        ->     GROUP BY student_name;
    ☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

    2008년 06월 05일
    함께 일하는 팀에서 업무 요청이 들어왔다.

    *****************************************************
    (1) MySQL에서 JOIN을 걸어 나온 결과의 키값을 이용하여,
    (2) 다른 테이블에서 이를 검색 후,
    (3) 중복된 키값의 결과를 한 개의 필드 안에 넣고 싶다는 것.

    뭔 말이냐고?

    (1) 테이블끼리 JOIN을 걸어 나온 키 값들을 얻는다.
    뭐.. 이건 생략 --;; 어차피 어떤 테이블 A라고 해도 상관없다.
    암튼 결과는 (A라고 하자)

    << A >>
    result_key
    --------------
    1
    2
    3
    4


    요렇게 나왔다고 보자.

    ======================================================
    (2) 다른 테이블(B라고 하자)에서 이넘들을 찾아야 한다.

    << B >>

    id         value
    -----  ----------
    1         a
    1         b
    1         c
    2         d
    2         e
    5         f
    ..............................................................

    SELECT B.id, B.value
    FROM A, B
    WHERE B.id = A.id

    하면,
    ↓↓↓↓↓↓↓↓↓↓↓↓↓↓

    id         value
    -----  ----------
    1         a
    1         b
    1         c
    2         d
    2         e

    라고 나오겠지?

    =========================================================
    (3) 자 그럼 이제 id(키값)을 이용하여, 
        그리고 구분자를 '-' 로 하여, 
        중복된 녀석들의 value를 한 곳에 몰아 넣어보자.

    SELECT B.id, group_concat(B.value SEPARATOR '-')
    FROM A, B
    WHERE B.id = A.id
    GROUP BY B.id

    결과는?

    ↓↓↓↓↓↓↓↓↓↓↓↓↓↓

    id         value
    -----  ----------
    1         a-b-c
    2         d-e

    요렇게 나오게 된다.
    (만약 SEPARATOR를 안 적어주면, 기본으로 ',' 쉼표가 들어간다.)


    게다가 ORDER BY도 섞어 쓸 수있다는 것!
    즉, 

    SELECT B.id, group_concat(B.value ORDER BY B.value DESC SEPARATOR '-' )
    FROM A, B
    WHERE B.id = A.id
    GROUP BY B.id

    라고 해준다면,
    ↓↓↓↓↓↓↓↓↓↓↓↓↓↓

    id         value
    -----  ----------
    1         c-b-a
    2         e-d

    라고 결과가 나오게 된다.
    ( 단, help 에 나온대로 입력 순서를 지킬 것.)


    ●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎

    아싸라비아.... 
    요즘은 하루에 하나씩,
    무언가를 알아간다.........................

    ●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎



    출처: https://blackbull.tistory.com/3 [음머어's 까망별]

    '개발 > Database' 카테고리의 다른 글

    트랜잭션의 특성  (0) 2020.11.24
Designed by Tistory.