在MySQL中将重复记录显示为不同的值,将对应的值显示为不同的逗号分隔列表?

为此,您可以使用GROUP_CONCAT()。您还需要使用DISTINCT来获取不同的记录。让我们首先创建一个表-

mysql> create table DemoTable(
   Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   Name varchar(40),
   Score int
);

使用插入命令在表中插入一些记录-

mysql> insert into DemoTable(Name,Score) values('Chris',56);
mysql> insert into DemoTable(Name,Score) values('Robert',78);
mysql> insert into DemoTable(Name,Score) values('Chris',56);
mysql> insert into DemoTable(Name,Score) values('Bob',89);
mysql> insert into DemoTable(Name,Score) values('Chris',56);
mysql> insert into DemoTable(Name,Score) values('Chris',57);

使用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)