MySQL连接函数concat(),concat_ws(),group_concat()总结

MySQL三种连接函数concat(),concat_ws(),group_concat()使用总结

测试表结构:

create table t
(
  id   int auto_increment primary key,
  name varchar(20),
  score int(3)
);
插入数据:
insert into t(name, score) values ('cj1', 85), ('cj2', 90), ('cj3', 95);
  • concat()函数

说明:concat()函数,将多个字符串连接成一个字符串。返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。
语法:concat(str1, str2,...),每个str可指定分隔符。
示例:

select concat(id, name, sorce) as info from t; 
| info |  
| 1cj185 |
| 2cj290 |
| 3cj395 |
select concat(id, ',', name, ',', sorce) as info from t; 
| info |  
| 1,cj1,85 |
| 2,cj2,90 |
| 3,cj3,95 |

由上示例,这样操作不太友好,若指定分隔符需要在每两个字符串之间增加’,’,于是有了以下函数:

  • concat_ws()函数

说明:concat_ws()函数,将多个字符串连接成一个字符串,可以一次性指定分隔符。
语法:concat_ws(separator, str1, str2, …)
示例:

select concat_ws(',', id, name, sorce) as info from t; 
| info |  
| 1,cj1,85 |
| 2,cj2,90 |
| 3,cj3,95 |
(也能达到以上示例中的分割符效果)

注意:分隔符不能为null,如果为null,则返回结果为null。

select concat_ws(null, id, name, sorce) as info from t; 
| info |  
| null |
| null |
| null |
  • group_concat()函数

说明:GROUP_CONCAT()函数,将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator ‘分隔符’] )。

继续向测试表插入数据:
insert into t(name, score) values ('cj1', 86), ('cj2', 91)
select * from t;
| id | name | score |
| 1 | cj1 | 85 |
| 2 | cj2 | 90 |
| 3 | cj3 | 95 |
| 4 | cj1 | 86 |
| 5 | cj2 | 91 |

示例:
1、使用group_concat()和group by显示相同名字的人的score

select name, group_concat(score) from t group by name; 
| name | group_concat(score) |
| cj1 | 85,86 |
| cj2 | 90,91 |
| cj3 | 95 |

2、将分组的的score从大到小排序,且用’_'作为分隔符

select name, group_concat(score order by score desc separator '_') from t group by name;
| name | group_concat(score order by score desc separator '_') |
| cj1 | 86_85 |
| cj2 | 91_90 |
| cj3 | 95 |

3、查询以name分组的所有组的id和score,每对数据用’_'作为分隔符

select name, group_concat(concat_ws('-', id, score) order by id) from t group by name;
| name | group_concat(concat_ws('-', id, score) order by id) |
| cj1 | 1-85,4-86 |
| cj2 | 2-90,5-91 |
| cj3 | 3-95 |
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值