mysql concat换行,mysql关于使用GROUP_CONCAT后字段的求和问题

commissioner 表如下:

8c02f773505530fea9fd9413c6e82e48.png

arrangement 表如下:

56851e077e08f1487ba10ab3d1eeae6d.png

现有sql语句如下:

DROP TABLE IF EXISTS temp_arrangement;

CREATE TABLE temp_arrangement

SELECT

`arrangement`.`id`,

`arrangement`.`projectid`,

`arrangement`.`courseid`,

`arrangement_date`.`date` AS `traindate`,

GROUP_CONCAT(`arrangement`.`teacherid`  ORDER BY `arrangement`.`teacherid` ASC)  AS `teacherids`,

`arrangement`.`commissionerids` AS `commissionerids`,

GROUP_CONCAT(DISTINCT `commissioner`.`name`  ORDER BY `commissioner`.`id` ASC) AS `commissionernames`,

`arrangement`.`time`,

`arrangement`.`traindays`,

SUM(CASE WHEN `arrangement`.`traindays`=0 THEN `arrangement`.`time` ELSE `arrangement`.`traindays` END) AS `usetime`

FROM

`arrangement`

INNER JOIN

`arrangement_date`

ON

DATE(`arrangement_date`.`date`)  BETWEEN  DATE(`arrangement`.`startdate`) AND  DATE(`arrangement`.`enddate`)

LEFT JOIN

`commissioner`

ON FIND_IN_SET(`commissioner`.`id`,`arrangement`.`commissionerids`)

WHERE DATE( `arrangement_date`.`date`)  BETWEEN  DATE(""2015-07-01"")  AND  DATE(""2015-07-10"")

GROUP BY  `arrangement`.`projectid`,`arrangement`.`courseid`, `arrangement_date`.`date` ;

SELECT a.* FROM temp_arrangement AS a  ORDER BY

(SELECT MIN(b.traindate) FROM temp_arrangement AS b WHERE projectid=a.projectid),a.projectid,a.traindate;

执行结果如下图所示:

8c364a43cc71464650f9314864a13a70.png

想实现GROUP_CONCAT(“”`arrangement`.`teacherid`””)之后的teacherids不重复,且usetime应该以teacherids的个数为根据来进行求和,即:teacherids去重复后,如果teacherids为单个数字,没有逗号分隔,则usetime对应的应该是1,而不是上图中的2。

当然,GROUP_CONCAT(DISTINCT `arrangement`.`teacherid`)可以去重复,但usetime却不是想要 的效果。

想请教各位达人,要实现下图这种效果,要怎么改进sql语句呢?

37ddf184be37e25056ff5cf5fe832ea5.png