大家好,我是天空之城,今天给大家带来group_concat的应用场景,当我们用group by进行数据分组之后,我们想知道分组内的具体数据,就需要用到group_concat了。
建表链接https://blog.csdn.net/littlespider889/article/details/106560626
group_concat需要和group by联合使用,用于将某一列的值按指定的分隔符进行拼接,mysql默认的分隔符是逗号。
语法:
group_ concat([distinct] column_ name [order by column_ name asc/desc ] [separator '分隔符'])
还是用上次那个employee表进行练习
先看下各个部门的人数
mysql> select dept, count(*) from employee group by dept;
+-------+----------+
| dept | count(*) |
+-------+----------+
| 部门A | 5 |
| 部门C | 3 |
| 部门B | 5 |
+-------+----------+
再看每个组的具体名单,一条命令就出结果
mysql> select dept,group_concat(name) from employee group by dept;
+-------+------------------------------+
| dept | group_concat(name) |
+-------+------------------------------+
| 部门A | 张三,李小梅,李芳,张江,马小龙 |
| 部门B | 李四,王五,龙五,马小花,刘山 |
| 部门C | 李洁,欧阳辉,冯小芳
对人员的名字进行降序排序处理
mysql> select dept,group_concat(name order by name desc) from employee group by dept;
+-------+---------------------------------------+
| dept | group_concat(name order by name desc) |
+-------+---------------------------------------+
| 部门A | 马小龙,李芳,李小梅,张江,张三 |
| 部门B | 龙五,马小花,王五,李四,刘山 |
| 部门C | 欧阳辉,李洁,冯小芳 |
+-------+---------------------------------------+
名字中间按照分号;来分割
mysql> select dept,group_concat(name order by name desc separator ';') from employee group by dept;
+-------+-----------------------------------------------------+
| dept | group_concat(name order by name desc separator ';') |
+-------+-----------------------------------------------------+
| 部门A | 马小龙;李芳;李小梅;张江;张三 |
| 部门B | 龙五;马小花;王五;李四;刘山 |
| 部门C | 欧阳辉;李洁;冯小芳 |
+-------+-----------------------------------------------------+