Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

MySQL에서 고유한 쉼표로 구분된 목록으로 해당 값을 사용하여 중복 레코드를 고유한 값으로 표시하시겠습니까?

<시간/>

이를 위해 GROUP_CONCAT()을 사용할 수 있습니다. 또한 DISTINCT를 사용하여 고유한 레코드를 가져와야 합니다. 먼저 테이블을 생성하겠습니다 -

mysql> create table DemoTable(
   Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   Name varchar(40),
   Score int
);
Query OK, 0 rows affected (0.53 sec)

삽입 명령을 사용하여 테이블에 일부 레코드 삽입 -

mysql> insert into DemoTable(Name,Score) values('Chris',56);
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable(Name,Score) values('Robert',78);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(Name,Score) values('Chris',56);
Query OK, 1 row affected (0.42 sec)
mysql> insert into DemoTable(Name,Score) values('Bob',89);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(Name,Score) values('Chris',56);
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable(Name,Score) values('Chris',57);
Query OK, 1 row affected (0.13 sec)

select 문을 사용하여 테이블의 모든 레코드 표시 -

mysql> select *from DemoTable;

그러면 다음과 같은 출력이 생성됩니다. 여기에서 중복된 "점수" 값으로 "이름" 레코드를 반복했습니다. −

+----+--------+-------+
| Id | Name   | Score |
+----+--------+-------+
|  1 | Chris  |    56 |
|  2 | Robert |    78 |
|  3 | Chris  |    56 |
|  4 | Bob    |    89 |
|  5 | Chris  |    56 |
|  6 | Chris  |    57 |
+----+--------+-------+
6 rows in set (0.00 sec)

다음은 이미 GROUP BY −

를 사용하는 테이블에서 레코드를 루프하는 쿼리입니다.
mysql> select Name, group_concat(DISTINCT Score separator ',') from DemoTable group by Name;

이것은 다음과 같은 출력을 생성합니다 -

+--------+--------------------------------------------+
| Name   | group_concat(DISTINCT Score separator ',') |
+--------+--------------------------------------------+
| Bob    | 89                                         |
| Chris  | 56,57                                      |
| Robert | 78                                         |
+--------+--------------------------------------------+
3 rows in set (0.00 sec)