logo

MySQL | Group_CONCAT() 함수

MySQL의 GROUP_CONCAT() 함수는 여러 행의 데이터를 하나의 필드로 연결하는 데 사용됩니다. 이는 다음을 반환하는 집계(GROUP BY) 함수입니다. 그룹에 비-항목이 하나 이상 포함된 경우 값 없는 값. 그렇지 않으면 반환됩니다. 없는 .

통사론:



SELECT col1, col2, ..., colN GROUP_CONCAT ( [DISTINCT] col_name1  [ORDER BY clause] [SEPARATOR str_val] )  FROM table_name GROUP BY col_name2;>

매개변수:

폰 노이만 아키텍처
  • col1, col2, ...colN: 테이블의 컬럼 이름입니다.
  • col_name1: 값이 각 그룹의 단일 필드로 연결되는 테이블의 열입니다.
  • 테이블_이름: 테이블 이름.
  • col_name2: 그룹화가 수행되는 테이블의 열입니다.

내부의 다양한 조항 사용 GROUP_CONCAT() 기능

  • 별개의: 결과에서 값의 반복을 제거합니다.
  • 주문: 그룹의 값을 특정 순서로 정렬한 다음 연결합니다.
  • 분리 기호: 기본적으로 그룹의 값은 ( , ) 운영자. 이 구분 기호 값을 변경하려면 Separator 절과 문자열 리터럴을 차례로 사용합니다. 그것은 다음과 같이 주어진다. 구분 기호 'str_value' .

예:

Employee 테이블을 고려해 보겠습니다.



emp_id f이름 이름 부서_ID
1 무케시 굽타 2 지도
닐람 샤마 열심히 일하는
1 무케시 굽타 2 책임이 있는
2 데베쉬 티야기 2 시간 엄수
닐람 샤마 자기 동기 부여
1 무케시 굽타 2 빨리 배우는 사람
4 케샤브 싱할 청취
2 데베쉬 티야기 2 빨리 배우는 사람
5 묻다 자이나교 1 열심히 일하는
4 케샤브 싱할 비판적 사고
5 묻다 자이나교 1 목표 지향

질문

1. 간단한 GROUP_CONCAT() 함수 사용 –

SELECT emp_id, fname, lname, dept_id,  GROUP_CONCAT ( strength ) as 'strengths'  FROM employee  GROUP BY fname;>

산출

emp_id f이름 이름 부서_ID 강점
1 무케시 굽타 2 리더십, 책임감, 빨리 배우는 사람
2 데베쉬 티야기 2 시간 엄수, 빠른 학습
닐람 샤마 근면함, 자기 동기 부여
4 케샤브 싱할 듣기, 비판적 사고
5 묻다 자이나교 1 근면함, 목표 지향적

2. DISTINCT 절 사용 –

자바를 업그레이드하는 방법

질문

SELECT dept_id,  GROUP_CONCAT ( DISTINCT strength) as 'employees strengths'  FROM employee  GROUP BY dept_id;>

산출

부서_ID 직원의 강점
1 목표 지향적이고 열심히 일하는
2 리더십, 시간엄수, 빠른 학습, 책임감
비판적 사고, 근면함, 경청, 자기주도적

3. ORDER BY 절 사용 –



질문

SELECT dept_id,  GROUP_CONCAT ( DISTINCT emp_id ORDER BY emp_id SEPARATOR ', ') as 'employees ids'  FROM employee  GROUP BY dept_id;>

여기, 구분 기호 ',' 값을 쉼표로 구분합니다( , ) 및 공백 문자.

산출

부서_ID 직원 ID
1 5
2 1, 2
3. 4

단일 필드에서 서로 다른 열의 여러 행을 연결하는 방법은 무엇입니까?

지금까지 우리는 GROUP_CONCAT() 함수를 사용하여 동일한 열에 속한 여러 행의 값을 그룹화하는 방법을 살펴보았습니다. 하지만, 연결() function과 group_concat() 함수를 함께 사용하면 서로 다른 행의 둘 이상의 열 값을 단일 필드로 결합할 수 있습니다.

예:
위 직원 테이블을 고려하여 두 번째 쿼리에서 직원 ID와 함께 직원 강점을 찾으려면 다음과 같이 작성됩니다.

SELECT dept_id, GROUP_CONCAT ( strengths SEPARATOR ' ') as 'emp-id : strengths' FROM (   SELECT dept_id, CONCAT ( emp_id, ':', GROUP_CONCAT(strength SEPARATOR', ') )   as 'strengths'   FROM employee   GROUP BY emp_id  ) as emp  GROUP BY dept_id;>

설명:
위 쿼리는 두 가지로 구성됩니다. SELECT 문 내부와 외부.

내부 SELECT 문 -

질문

SELECT dept_id, concat ( emp_id, ':', GROUP_CONCAT ( strength separator ', ' ) ) as 'strengths'  FROM employee  GROUP BY dept_id, emp_id>

emp_id에 따라 직원 테이블의 행을 그룹화합니다. 첫 번째 결과 열에는 dept_id가 표시되고 두 번째 열에는 강점 목록과 함께 emp_id가 표시됩니다.

모니터가 뭐야?

산출 내부 SELECT 문에 대해-

부서_ID 강점
2 1: 리더십, 책임감, 빠른 학습
2 2: 시간 엄수, 빠른 학습
3: 근면함, 자기 동기 부여
4: 듣기, 비판적 사고
1 5: 근면함, 목표 지향적

외부 SELECT 문은 이제 dept_id에 따라 이러한 행을 그룹화합니다.

산출

부서_ID emp-id: 강점
1 5: 근면함, 목표 지향적
2 1: 리더십, 책임감, 빠른 학습 2: 시간 엄수, 빠른 학습
3: 근면함, 자기 동기 부여 4: 경청, 비판적 사고

메모: GROUP_CONCAT() 함수의 결과는 최대 길이로 잘립니다. 즉, 1024 이는 시스템 변수에 의해 제공됩니다. group_concat_max_len . 그러나 group_concat_max_len 변수의 값은 다음을 사용하여 런타임에 변경될 수 있습니다. 세트 명령을 다음과 같이-

SET [GLOBAL | SESSION] group_concat_max_len = value;   value:   It is the new value set to the variable.>