使用场景介绍
按照部门编号dept_no进行汇总,属于同一个部门的员工编号emp_no通过逗号进行连接,结果给出dept_no以及连接出的结果employees
1 2 3 4 5 6
| CREATE TABLE `dept_emp` ( `emp_no` int(11) NOT NULL, `dept_no` char(4) NOT NULL, `from_date` date NOT NULL, `to_date` date NOT NULL, PRIMARY KEY (`emp_no`,`dept_no`));
|
输出格式:
1 2 3 4 5 6 7 8 9 10
| + | dept_no | employees | + | d001 | 10001,10002 | | d002 | 10006 | | d003 | 10005 | | d004 | 10003,10004 | | d005 | 10007,10008,10010 | | d006 | 10009,10010 | +
|
解决方法
聚合函数group_concat(X,Y),其中X是要连接的字段,Y是连接时用的符号,可省略,默认为逗号。此函数必须与 GROUP BY 配合使用。
1 2 3 4
| SELECT dept_no, group_concat(emp_no) AS employees FROM dept_emp GROUP BY dept_no;
|
如果不是用默认的逗号连接,而是其他符号,比如’&’,那么可以修改为:
1 2 3
| SELECT dept_no, group_concat(emp_no separator '&') AS employees FROM dept_emp GROUP BY dept_no;
|
输出结果
1 2 3 4 5 6 7 8 9 10
| + | dept_no | employees | + | d001 | 10001&10002 | | d002 | 10006 | | d003 | 10005 | | d004 | 10003&10004 | | d005 | 10007&10008&10010 | | d006 | 10009&10010 | +
|