[sql] GROUP BY를 사용하여 MySQL에서 문자열을 연결하는 방법은 무엇입니까?

기본적으로 문제는 이것으로부터 얻는 방법입니다.

foo_id foo_name
1 개
1 개 B
2 C

이에:

foo_id foo_name
1 AB
2 C



답변

SELECT id, GROUP_CONCAT(name SEPARATOR ' ') FROM table GROUP BY id;

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

위의 링크에서 GROUP_CONCAT:이 함수는 그룹에서 연결된 NULL이 아닌 값으로 문자열 결과를 반환합니다. NULL이 아닌 값이 없으면 NULL을 반환합니다.


답변

SELECT id, GROUP_CONCAT( string SEPARATOR ' ') FROM table GROUP BY id

자세한 내용은 여기를 참조 하십시오 .

위의 링크에서 GROUP_CONCAT:이 함수는 그룹에서 연결된 NULL이 아닌 값으로 문자열 결과를 반환합니다. NULL이 아닌 값이 없으면 NULL을 반환합니다.


답변

SELECT id, GROUP_CONCAT(CAST(name as CHAR)) FROM table GROUP BY id

쉼표로 구분 된 문자열을 제공합니다


답변

SELECT id, GROUP_CONCAT(name SEPARATOR ' ') FROM table GROUP BY id;

:-MySQL에서는 연결된 표현식 조합 값을 얻을 수 있습니다. 중복 값을 제거하려면 DISTINCT 절을 사용하십시오 . 결과에서 값을 정렬하려면 ORDER BY 절을 사용하십시오. 역순으로 정렬하려면 ORDER BY 절에서 정렬중인 컬럼 이름에 DESC (내림차순) 키워드를 추가하십시오 . 기본값은 오름차순입니다. ASC 키워드를 사용하여 명시 적으로 지정할 수 있습니다. 그룹의 값 사이의 기본 구분 기호는 쉼표 (“,”)입니다. 구분자를 명시 적으로 지정하려면 SEPARATOR를 사용하고 그 뒤에 그룹 값 사이에 삽입해야하는 문자열 리터럴 값을 사용하십시오. 구분 기호를 모두 제거하려면 SEPARATOR ”를 지정하십시오 .

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

또는

mysql> SELECT student_name,
    ->     GROUP_CONCAT(DISTINCT test_score
    ->               ORDER BY test_score DESC SEPARATOR ' ')
    ->     FROM student
    ->     GROUP BY student_name;


답변

결과는 기본값이 1024자인 group_concat_max_len 시스템 변수가 제공하는 최대 길이로 잘 리므로 먼저 다음을 수행하십시오.

SET group_concat_max_len=100000000;

그런 다음 예를 들면 다음과 같습니다.

SELECT pub_id,GROUP_CONCAT(cate_id SEPARATOR ' ') FROM book_mast GROUP BY pub_id


답변

좋은 답변입니다. 또한 NULLS에 문제가 있었고 GROUP_CONCAT 안에 COALESCE를 포함 시켜서 해결할 수있었습니다. 다음과 같은 예 :

SELECT id, GROUP_CONCAT(COALESCE(name,'') SEPARATOR ' ')
FROM table
GROUP BY id;

이것이 다른 누군가를 돕기를 바랍니다.


답변