OJ使用的SQLite语法在这个问题上其实存在一些值得探究的东西。
首先要说明的是, OJ系统如果在group_concat中使用distinct,则无法同时使用指定分隔符,所以只能以下二者之一: select dept_no, group_concat(emp_no, ',') as employees
from dept_emp group by dept_no;
select dept_no, group_concat(distinct emp_no) as employees
from dept_emp group by dept_no;
如果我们要在连接时对emp_no指定顺序,并且考虑去重的话,那么只能写一个子查询。 select dept_no, group_concat(emp_no, ',') as employees
from (select distinct dept_no, emp_no from dept_emp order by dept_no asc, emp_no asc)
group by dept_no;
当然,单纯以这道题而论,由于存在emp_no和dept_no的联合主键,那么不需要去考虑去重的问题,而同一dep_no的emp_no恰好也是顺序自增的(本题的测试数据如下所示),所以刚好避开了这两块,但就题目一般性而论,这是必须考虑的: INSERT INTO dept_emp VALUES(10001,'d001','1986-06-26','9999-01-01');
INSERT INTO dept_emp VALUES(10002,'d001','1996-08-03','9999-01-01');
INSERT INTO dept_emp VALUES(10003,'d004','1995-12-03','9999-01-01');
INSERT INTO dept_emp VALUES(10004,'d004','1986-12-01','9999-01-01');
INSERT INTO dept_emp VALUES(10005,'d003','1989-09-12','9999-01-01');
INSERT INTO dept_emp VALUES(10006,'d002','1990-08-05','9999-01-01');
INSERT INTO dept_emp VALUES(10007,'d005','1989-02-10','9999-01-01');
INSERT INTO dept_emp VALUES(10008,'d005','1998-03-11','2000-07-31');
INSERT INTO dept_emp VALUES(10009,'d006','1985-02-18','9999-01-01');
INSERT INTO dept_emp VALUES(10010,'d005','1996-11-24','2000-06-26');
INSERT INTO dept_emp VALUES(10010,'d006','2000-06-26','9999-01-01');
多说两句,这个问题在mysql和postgresql中是很好解决的,如下所示: -- psql,重点在于string_agg()函数
select dept_no, string_agg(distinct emp_no, ',' order by emp_no asc) as employees
from dept_emp group by dept_no;
-- mysql,重点在于group_concat()函数。
select dept_no, group_concat(distinct emp_no order by emp_no asc separator ',') as employees
from dept_emp group by dept_no;