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 에 나온대로 입력 순서를 지킬 것.)
'DB' 카테고리의 다른 글
오라클에 접속하기 (0) | 2012.07.29 |
---|---|
ORACLE GROUP_CONCAT (0) | 2012.07.29 |
ORDER BY item must be the number of a SELECT-list expression (0) | 2012.07.29 |
셀렉트하면서 인서트 (0) | 2012.07.29 |
Mysql 숫자함수, 날짜함수, 기타함수, 논리함수 (0) | 2012.07.29 |