개발/Database

GROUP_CONCAT

종현닷컴 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 까망별]