Linux|系统管理|WEB开发

关注Linux,系统管理,WEB开发以及开源世界

发现group_concat

| Comments

开发的过程遇到了一个问题: 我希望在MySQL数据中对数据表中的某一个字符型字段的内容累加起来,也就是多行数据的字符串链接问题。举个例子。

1
2
3
4
5
6
7
8
9
10
mysql> select * from test;
+----+-------+
| id | name |
+----+-------+
| 1 | Jack |
| 1 | Peter |
| 2 | John |
| 2 | Mark |
| 3 | Ellis |
+----+-------+

那么我希望通过SQL语句,得到下面这样的结果

1
2
3
4
5
6
+----+-----------------+
| id | name |
+----+-----------------+
| 1 | Jack,Peter |
| 2 | John,Mark,Ellis |
+----+-----------------+

当然之间用什么分隔符,这到无关紧要,重要是的如何得到,我所知道的是,如果这个字段是数值型的,那么使用sum函数配合group by能做到。但是字符型就不能怎么干了,尝试了concat函数和group by配合,还是不行。

后来去MySQL的文章中心去找函数,看看是否有可以做到这点的,果然你能想到的,也必定是别人想到的呀,在MySQL文章中心找到了group_concat()函数,是的,它就是我所需要的。该函数的具体介绍,看官方文档好了,对于我的问题,仅仅只需要下面这样的SQL语句就搞定。

1
2
3
4
5
6
7
mysql> select id,group_concat(name) as name from test group by id;
+----+-----------------+
| id | name |
+----+-----------------+
| 1 | Jack,Peter |
| 2 | John,Mark,Ellis |
+----+-----------------+

不过这也就意味着,你的代码就不具有数据库独立性了,因为这个函数不是所有的数据库都支持的,管他呢,我暂时还没有想过我现在的这个代码会迁移到其他数据库上去。

Comments