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

MySQL에서 중복 ID 값 기준으로 열을 연결하는 방법 – GROUP_CONCAT으로 슬래시(/) 구분해 하나의 열에 표시하기

MySQL에서 동일한 ID(중복 값)를 가진 여러 행의 데이터를 하나의 열로 합쳐서 보여주고 싶다면 GROUP_CONCAT() 함수를 사용하면 됩니다. 이 함수는 GROUP BY로 묶인 각 그룹의 값을 하나의 문자열로 연결해 주며, SEPARATOR 옵션을 활용하면 원하는 구분자(예: 슬래시 '/')로 값을 나눠 표시할 수 있습니다.

아래에서 실제 예제를 통해 단계별로 살펴보겠습니다.

1단계: 테이블 생성

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable764 (
    ProductId int,
    ProductPrice int
);
Query OK, 0 rows affected (0.56 sec)

2단계: 데이터 삽입

INSERT 명령을 사용해 일부러 중복된 ProductId를 포함한 레코드들을 삽입합니다.

mysql> insert into DemoTable764 values(101,10000);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable764 values(102,1090);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable764 values(103,4000);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable764 values(102,3450);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable764 values(101,20000);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable764 values(104,50000);
Query OK, 1 row affected (0.12 sec)

3단계: 전체 데이터 확인

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable764;

실행 결과는 다음과 같습니다. ProductId 101과 102가 각각 두 번씩 등장하는 것을 확인할 수 있습니다.

+-----------+--------------+
| ProductId | ProductPrice |
+-----------+--------------+
|      101 |        10000 |
|      102 |         1090 |
|      103 |         4000 |
|      102 |         3450 |
|      101 |        20000 |
|      104 |        50000 |
+-----------+--------------+
6 rows in set (0.00 sec)

4단계: GROUP_CONCAT으로 중복 ID 값 연결하기

이제 중복된 ProductId를 기준으로 그룹화하고, 각 그룹에 속한 ProductPrice 값을 슬래시('/')로 구분하여 하나의 열에 연결하는 쿼리입니다.

mysql> select ProductId,
    group_concat(ProductPrice SEPARATOR '/') AS ProductPrice from DemoTable764
    group by ProductId;

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

+-----------+---------------+
| ProductId | ProductPrice  |
+-----------+---------------+
|      101 | 10000/20000   |
|      102 | 1090/3450     |
|      103 | 4000          |
|       104 | 50000         |
+-----------+---------------+
4 rows in set (0.00 sec)

결과 해석

  • ProductId 101: 두 개의 가격(10000, 20000)이 '10000/20000' 형태로 하나의 행에 표시됩니다.
  • ProductId 102: 마찬가지로 '1090/3450'으로 연결됩니다.
  • ProductId 103, 104: 중복이 없으므로 기존 값 그대로 표시됩니다.

추가 팁

SEPARATOR를 지정하지 않으면 기본 구분자는 콤마(',')입니다. 또한 연결되는 값의 순서를 정렬하고 싶다면 GROUP_CONCAT(ProductPrice ORDER BY ProductPrice ASC SEPARATOR '/')처럼 ORDER BY 절을 함께 사용할 수 있으며, 중복 값 자체를 제거하고 싶다면 DISTINCT 키워드를 추가하면 됩니다.