欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL中CONCAT()和GROUP_CONCAT()函数的使用

程序员文章站 2024-03-20 08:45:46
...

@TOC

CONCAT()使用

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

初始数据:

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

MySQL中CONCAT()和GROUP_CONCAT()函数的使用

使用concat函数连接相应字段

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

MySQL中CONCAT()和GROUP_CONCAT()函数的使用

当其中有值为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'

MySQL中CONCAT()和GROUP_CONCAT()函数的使用

相似函数 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'

MySQL中CONCAT()和GROUP_CONCAT()函数的使用

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

GROUP_CONCAT()函数

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

初始数据:

MySQL中CONCAT()和GROUP_CONCAT()函数的使用

利用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

MySQL中CONCAT()和GROUP_CONCAT()函数的使用

现在可以看到想要的功能已经实现,但合并的老师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

MySQL中CONCAT()和GROUP_CONCAT()函数的使用

扩展:有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

MySQL中CONCAT()和GROUP_CONCAT()函数的使用

相关标签: mysql 数据库