MySQL中concat()、concat_ws()、group_concat()函数使用

在平时工作中,经常记不清或者记混他们的用法,正好有时间就记录一下~

  1. concat()函数

语法:concat(str1, str2, int1...)

例如执行sql:

SELECT CONCAT(id,USERNAME,USER_PHONE) FROM tb_user

输出查询结果为:
1test15216756754
192Test17051331386
193德庄火锅1113773670133
194南通印象13773707311
195辣五味13862768650

那如果拼接的有null值:

SELECT CONCAT(id,USERNAME,null) FROM tb_user

输出查询结果为:
null
null
null
null

结果则为null。concat()可以拼接string/int类型。但是拼接null会得到null值。

  1. concat_ws()函数

和concat()不同的是concat_ws() 可以指定分隔符,concat_ws就是concat with separator。

注意separator不能为null,否则结果将会为null。

语法:concat_ws(separator, str1, str2, ...)

concat_ws()指定分隔符,用法如下:

SELECT CONCAT_WS('-',id,USERNAME,0,USER_EMAIL) FROM tb_user

输出查询结果为:
1-test-0-qliuqian@163.com
192-Test-0-
193-德庄火锅-0-xx@xx.com
194-南通印象-0-xx@xx.com

concat()拼接null值会得到null值,concat_ws()拼接null值会忽略null值。

  1. group_concat()函数

语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )

注意:1.[]非必选项

2.group_concat只有与group by语句同时使用才能产生效果,否则所有数据会被合并成一行

3.distinct用于对拼接的结果去重;separator是一个字符串值,缺省为一个逗号。

接下来就展示group_concat()的简单用法。

我以我们公司的某个数据库的项目表为主,作为演示。

案例1

根据区域分组统计区域内的项目名称,且进行降序排序

SELECT
project_region_area,
GROUP_CONCAT(distinct `name` order by `name` desc separator '-')
FROM tah_project
GROUP BY project_region_area

输出查询结果为:
冀中区    张家口·蔚县·中节能-保定·涞水·中节能-任丘·议论堡·深能源
冀北区    天津·北辰·浙能-唐山·曹妃甸·中交-唐山·乐亭·浙能-唐山·丰润·浙能
冀南区    阳泉·郊区·锦江-邯郸·永年·中电-邢台·威县·深能源-衡水·冀州·泰达
冀西区    石家庄·行唐·中节能-石家庄·栾城·中节能-石家庄·无极·锦江
案例2

在案例1的基础上,项目名称加上项目ID展示(函数嵌套使用)

SELECT
project_region_area,
GROUP_CONCAT(CONCAT_WS('-', id, name) order by id desc)
FROM tah_project
GROUP BY project_region_area

输出查询结果为:
冀中区    189-张家口·蔚县·中节能,134-任丘·议论堡·深能源,133-保定·涞水·中节能
冀北区    176-唐山·曹妃甸·中交,123-天津·北辰·浙能,122-唐山·乐亭·浙能,115-唐山·丰润·浙能
冀南区    217-衡水·冀州·泰达,180-邯郸·永年·中电,135-邢台·威县·深能源,121-阳泉·郊区·锦江
冀西区    203-石家庄·行唐·中节能,182-石家庄·栾城·中节能,124-石家庄·无极·锦江

以上就是group_concat()的简单使用啦。

根据自己需要改动哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值