按照dept汇总MySQL_按照dept_no进行汇总

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值