Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 여러 행의 문자열을 한 행으로 합치고 ID 합계까지 한 번에 구하는 쿼리

MySQL에서 여러 행에 흩어져 있는 문자열 데이터를 하나의 행으로 결합하고, 동시에 숫자 컬럼의 합계를 구해야 한다면 GROUP_CONCAT()SUM() 함수를 함께 사용하면 됩니다. GROUP_CONCAT()은 여러 행의 문자열 값을 하나로 이어 붙여 주고, SUM()은 지정한 컬럼의 값들을 모두 더해 줍니다.

1. 예제 테이블 생성

먼저 실습에 사용할 테이블을 만들어 보겠습니다.

mysql> create table DemoTable1960
    (
    StudentId int,
    StudentName varchar(20)
    );
Query OK, 0 rows affected (0.00 sec)

2. 샘플 데이터 삽입

insert 명령으로 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable1960 values(100,'Chris');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1960 values(101,'Bob');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1960 values(102,'David');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1960 values(103,'Mike');
Query OK, 1 row affected (0.00 sec)

3. 저장된 데이터 확인

select 문으로 테이블의 전체 레코드를 조회합니다.

mysql> select * from DemoTable1960;

실행 결과는 다음과 같습니다.

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
|      100 | Chris       |
|      101 | Bob         |
|      102 | David       |
|      103 | Mike        |
+-----------+-------------+
4 rows in set (0.00 sec)

4. 문자열 결합과 합계를 한 번에 구하는 쿼리

이제 학생 이름들을 하나의 행으로 합치고, StudentId의 합계도 함께 출력하는 쿼리입니다.

mysql> select sum(StudentId),group_concat(StudentName separator '.') as ListOfStudent from DemoTable1960;

실행 결과는 다음과 같습니다.

+----------------+----------------------+
| sum(StudentId) | ListOfStudent       |
+----------------+----------------------+
|          406 | Chris.Bob.David.Mike |
+----------------+----------------------+
1 row in set (0.00 sec)

핵심 포인트 정리

  • GROUP_CONCAT(컬럼명): 여러 행의 문자열 값을 하나의 행으로 결합합니다.
  • separator 옵션: 값 사이에 들어갈 구분자를 자유롭게 지정할 수 있습니다. 위 예제에서는 마침표(.)를 사용했으며, 쉼표(,) 등 다른 문자로도 변경 가능합니다.
  • SUM(컬럼명): 숫자 컬럼의 전체 합계를 계산합니다.

참고로 GROUP_CONCAT()에는 기본적으로 group_concat_max_len 제한(기본값 1024바이트)이 적용되므로, 결합할 문자열이 매우 길다면 이 설정값을 늘려 주는 것이 좋습니다. 또한 GROUP BY 절과 함께 사용하면 그룹별로 문자열을 묶어 집계할 수 있어 실무에서 활용도가 높습니다.