求教使用GROUP_CONCAT后字段的求和问题
commissioner 表如下:

arrangement 表如下:

现有sql语句如下:
执行结果如下图所示:

想实现GROUP_CONCAT('`arrangement`.`teacherid`')之后的teacherids不重复,且usetime应该以teacherids的个数为根据来进行求和,即:teacherids去重复后,如果teacherids为单个数字,没有逗号分隔,则usetime对应的应该是1,而不是上图中的2。
当然,GROUP_CONCAT(DISTINCT `arrangement`.`teacherid`)可以去重复,但usetime却不是想要 的效果。
想请教各位达人,要实现下图这种效果,要怎么改进sql语句呢?


arrangement 表如下:

现有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;
执行结果如下图所示:

想实现GROUP_CONCAT('`arrangement`.`teacherid`')之后的teacherids不重复,且usetime应该以teacherids的个数为根据来进行求和,即:teacherids去重复后,如果teacherids为单个数字,没有逗号分隔,则usetime对应的应该是1,而不是上图中的2。
当然,GROUP_CONCAT(DISTINCT `arrangement`.`teacherid`)可以去重复,但usetime却不是想要 的效果。
想请教各位达人,要实现下图这种效果,要怎么改进sql语句呢?

...全文
相关推荐
MySQL中group_concat函数深入理解
**按值排序**: 你还可以指定合并后的值的顺序,例如按照`name`字段的值降序排列: ```sql SELECT id, GROUP_CONCAT(name ORDER BY name DESC)
MySQL GROUP_CONCAT限制解决方案
MySQL的GROUP_CONCAT函数是一个强大的聚合函数,用于将一组行中的某个字段值合并成一个字符串。它默认使用逗号作为分隔符,但允许通过SEPARATOR参数进行自定义。例如,如果你想在用户表(
Mysql的GROUP_CONCAT()函数使用方法
但在使用GROUP_CONCAT()函数后,这个过程变得非常简单:```sqlSELECT student_id, GROUP_CONCAT(courses_id) AS coursesFROM student_coursesWHERE
如何修改Mysql中group_concat的长度限制
`GROUP_CONCAT`函数还支持一些额外的选项,使得其更加强大和灵活:- **指定分隔符**:你可以自定义分隔符,例如使用下划线 `_`: ```sql SELECT GROUP_CONCAT(f_a
mysql的group_concat函数使用示例
,并将每个`id`对应的`name`字段的值合并为一行,可以使用以下SQL语句:```sqlSELECT id, GROUP_CONCAT(name) FROM aa GROUP BY id;```执行后


