728x90

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;

(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 에 나온대로 입력 순서를 지킬 것.)

출처 : http://blackbull.tistory.com/3

728x90

+ Recent posts