涉及方法:concat, concat_ws, group_concat
数据准备:
CREATE TABLE `app` (
`app_id` int DEFAULT '0',
`version_code` int DEFAULT '0',
`download_count` int DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
INSERT INTO `app`(`app_id`, `version_code`, `download_count`) VALUES (1, 10, 90);
INSERT INTO `app`(`app_id`, `version_code`, `download_count`) VALUES (1, 11, 100);
INSERT INTO `app`(`app_id`, `version_code`, `download_count`) VALUES (1, 10, 20);
INSERT INTO `app`(`app_id`, `version_code`, `download_count`) VALUES (2, 15, 10);
INSERT INTO `app`(`app_id`, `version_code`, `download_count`) VALUES (2, 16, 15);
INSERT INTO `app`(`app_id`, `version_code`, `download_count`) VALUES (2, 17, 30);
INSERT INTO `app`(`app_id`, `version_code`, `download_count`) VALUES (2, 16, 5);
INSERT INTO `app`(`app_id`, `version_code`, `download_count`) VALUES (3, 2, 50);
INSERT INTO `app`(`app_id`, `version_code`, `download_count`) VALUES (4, 9, NULL);
一、concat()
- 功能:将多个字符串连接成一个字符串
- 语法:concat(str1, str2, ...)
- 说明:返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null
select concat (app_id, ',', version_code, ',', download_count) as info from app;
二、concat_ws()
- 功能:concat with separator,和concat()一样,但可以一次性指定分隔符将多个字符串连接成一个字符串
- 语法:concat_ws(separator, str1, str2, ...)
- 说明:separator指定分隔符
select concat_ws (',', app_id, version_code, download_count) as info from app;
三、group_concat()
- 功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果
- 语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc] [separator '分隔符'] );group_concat(expr)
- 说明:distinct排除重复值,order by子句对结果集进行排序,separator指定分隔符,缺省为逗号;expr为表达式
select app_id,
group_concat(distinct version_code ORDER BY version_code separator '-') as res1,
group_concat(concat_ws('-', version_code, download_count)) as res2
from app group by app_id;
注意点:
- 有字段值为null时concat和concat_ws拼接后的结果有所不同,结果图中红框圈注
- concat_ws第一个参数(指定分隔符)若为null,返回结果为null