concat() 、concat_ws()和group_concat()

concat() 、concat_ws()和group_concat()

1.1 区别

concat、concat_ws和group_concat都是在sql语句中做拼接使用的,但是三者使用的方式不尽相同,concat是针对行数据做的拼接;concat_ws和concat()一样,将多个字符串连接成一个字符串,但是可以一次性指定分隔符;group_concat是针对列做的数据拼接,且group_concat自动生成逗号。

1.2 concat()函数

功能:将多个字符串连接成一个字符串,concat是针对以行数据做的拼接
语法:concat(str1, str2,…)
注意:返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。

1.2.1 建表sql

CREATE TABLE Employee(
id int,
name VARCHAR(20),
birthday datetime
)engine myisam charset utf8;

insert into Employee 
values(1,'李四', '2001-12-20'), (2,'张三', '2019-6-6'), (3,'王二', '1996-3-23'), (4,'皮卡丘', NULL);

**SELECT * FROM Employee**
concat() 、concat_ws()和group_concat()_第1张图片
**SELECT CONCAT(id, name, birthday) FROM Employee**
concat() 、concat_ws()和group_concat()_第2张图片

1.3 concat_ws()函数

功能:和concat()一样,将多个字符串连接成一个字符串,但是可以一次性指定分隔符(concat_ws就是concat with separator)
语法:concat_ws(separator, str1, str2, …)
注意:第一个参数指定分隔符。需要注意的是分隔符不能为null,如果为null,则返回结果为null。
sql和数据同上

**SELECT CONCAT_WS(',',id, name, birthday) FROM Employee**
concat() 、concat_ws()和group_concat()_第3张图片

**SELECT CONCAT_WS(NULL,id, name, birthday) FROM Employee**
concat() 、concat_ws()和group_concat()_第4张图片

1.4 group_concat()函数

功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果(group_concat是针对列做的数据拼接,且group_concat自动生成逗号)。
语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator ‘分隔符’] )
说明:通过使用distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号。

1.4.1 建表sql

create TABLE GroupConcatTest(
	id int,
	score int
)engine myisam charset utf8;

insert into GroupConcatTest 
values(1,10),(1,20),(1,20),(2,40),(3,20),(3,40),(3,50),(4, NULL);

**SELECT * FROM GroupConcatTest**
concat() 、concat_ws()和group_concat()_第5张图片

  • 需求1:每个id为一行,且每行显示该id所有分数
SELECT
	id,
	GROUP_CONCAT( score ) 
FROM
	GroupConcatTest 
GROUP BY
	id

concat() 、concat_ws()和group_concat()_第6张图片

  • 需求2:每个id为一行 每行显示该id所有不重复的分数
SELECT
	id,
	GROUP_CONCAT( DISTINCT score ) 
FROM
	GroupConcatTest 
GROUP BY
	id

concat() 、concat_ws()和group_concat()_第7张图片

  • 需求3:每个id为一行 每行显示该id所有不重复的分数且按照由高到低排序
SELECT
	id,
	GROUP_CONCAT( DISTINCT score ORDER BY score DESC ) 
FROM
	GroupConcatTest 
GROUP BY
	id

concat() 、concat_ws()和group_concat()_第8张图片

  • 需求4:每个id为一行 每行显示该id所有不重复的分数、按照由高到低排序,并以’;'隔开
SELECT
	id,
	GROUP_CONCAT( DISTINCT score ORDER BY score DESC SEPARATOR ';' ) 
FROM
	GroupConcatTest 
GROUP BY
	id

concat() 、concat_ws()和group_concat()_第9张图片

参考:

  1. https://blog.csdn.net/qq_35531549/article/details/90383022?ops_request_misc=&request_id=&biz_id=102&utm_term=sql%20group_concat%E5%87%BD%E6%95%B0%E7%94%A8%E6%B3%95&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-2-90383022.142v59pc_rank_34_1,201v3add_ask&spm=1018.2226.3001.4187

你可能感兴趣的:(sql,sql,数据库,java,mysql)