음머어's 까망별

블로그 이미지
무지 인간의 첫 걸음..
by 까망별 음머어
  • 400,152Total hit
  • 26Today hit
  • 32Yesterday hit

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


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

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

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












TRACKBACK 0 AND COMMENT 2
  1. 망나니 2010.04.13 14:47 address edit/delete reply

    다른 DBMS에도 있는거 같아요





ARTICLE CATEGORY

모든 이야기 (77)
독백 (22)
MySQL (25)
Oracle (7)
영화 (6)
Linux (3)
DW(Data Warehouse) (0)
(7)
음악 (1)
Python (3)
Postgresql (2)

ARCHIVE