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


351

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

foo_id foo_name
1 개
1 개 B
2 C

이에:

foo_id foo_name
1 AB
2 C

13
DOWNVOTE 열 문자열의 이름을 지정하는 것이 실제로 혼동되어 데이터 유형처럼 보이는 이름을 지정합니다. 따라서 응답은 열 이름을 지정할 때 데이터 형식을 지정하는 것처럼 보이기 때문에 영향을받습니다.
barlop

2
@barlop은 질문과 답변을 편집하여 문제를 해결했습니다.
ustun

답변:



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

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

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


결과 열에는 글자 수가 제한 되어 있습니다. 여기 와 문서를 참조 하십시오 :)
marlo

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

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


17
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;

15

결과는 기본값이 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

결과는 기본값1024 자인 group_concat_max_len 시스템 변수가 제공하는 최대 길이로 잘립니다 . docs
marlo

group_concat_max_len구성 의 범위는 무엇입니까 ? 현재 연결 / 세션입니까 아니면 다른 클라이언트에 영향을 줍니까?
Frozen Flame

@FrozenFlame :> 수정자가 없으면 SET은 세션 변수를 변경합니다. 변수에 세션 값이 없으면 오류가 발생합니다. 에서 dev.mysql.com/doc/refman/5.7/en/using-system-variables.html
arminrosu

3
이것은 OP의 질문에 대답하지 않고 단지 유용한 정보를 추가합니다. 이것은 답변이 아닌 의견이어야합니다.
Sean the Bean

1
이 코드 스 니펫은 제한적이고 즉각적인 도움이 될 수 있습니다. 적절한 설명은 크게이 문제에 대한 좋은 해결책이 왜 보여 장기적인 가치를 향상 것이고, 다른 유사한 질문을 미래의 독자들에게 더 유용 할 것입니다. 제발 편집 당신이 만든 가정 등 일부 설명을 추가 할 답변을.
Donald Duck

11

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.