MySQL中CONCAT()和GROUP

    技术2022-07-10  130

    @TOC

    CONCAT()使用

    语法:concat(str1, str2,…)功能:将多个字符串连接在一起 返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。使用

    初始数据:

    SELECT id, YEAR, term, course_id FROM edu_course_class WHERE id = '46639'

    使用concat函数连接相应字段

    SELECT id, YEAR, term, course_id, CONCAT( YEAR, '-', term, '-', course_id ) FROM edu_course_class WHERE id = '46639'

    当其中有值为null值时,使用concat函数返回值为null

    UPDATE edu_course_class SET term=NULL WHERE id='46639' SELECT id, YEAR, term, course_id, CONCAT( YEAR, '-', term, '-', course_id ) FROM edu_course_class WHERE id = '46639'

    相似函数 CONCAT_WS()使用

    语法:CONCAT_WS(separator,str1,str2,…)功能:和concat()一样,将多个字符串连接成一个字符串,但是可以一次性指定分隔符(concat_ws就是concat with separator)用法: SELECT id, YEAR, term, course_id, CONCAT_WS('-',year,term,course_id) FROM edu_course_class WHERE id = '46639'

    注意:第一个参数指定分隔符。需要注意的是分隔符不能为null,如果为null,则返回结果为null。

    GROUP_CONCAT()函数

    语法: GROUP_CONCAT(expr)功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。使用:

    初始数据:

    利用group_concat将学年,年级,学期,课程相同的老师合并到一行

    SELECT YEAR, term, grade, course_id, GROUP_CONCAT( teacher_id ) FROM edu_course_class WHERE plan_detail_id = '117827' GROUP BY YEAR, term, grade, course_id

    现在可以看到想要的功能已经实现,但合并的老师ID3627是重复的,现在做去重

    SELECT YEAR, term, grade, course_id, GROUP_CONCAT( DISTINCT(teacher_id) ) FROM edu_course_class WHERE plan_detail_id = '117827' GROUP BY YEAR, term, grade, course_id SELECT

    扩展:有id但不知道名字怎么办,用find_in_set函数带出老师姓名

    SELECT a.year, a.term, a.grade, a.course_id, a.teacherId, GROUP_CONCAT( su.username ) FROM ( SELECT YEAR, term, grade, course_id, GROUP_CONCAT( DISTINCT ( teacher_id ) ) teacherId FROM edu_course_class WHERE plan_detail_id = '117827' GROUP BY YEAR, term, grade, course_id ) a INNER JOIN sys_user su ON FIND_IN_SET( su.user_id, a.teacherId ) GROUP BY a.year,a.teacherId,a.term,a.grade,a.course_id

    Processed: 0.016, SQL: 9