group by 多个字段_mysql中concat(),concat_ws(),group_concat()的用法

e36f1df8403d62987c963be95bfc2721.png

1. concat()

功能:将多个字符串连接成一个字符串。

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

说明:返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。

用法

(1)不设置分隔符

mysql> select concat('001','小明','85') as result; 
+-------------+
 | result      | 
+-------------+
 | 001小明85   | 
+-------------+ 

(2)设置 '-' 作为分隔符

mysql> select concat('001','-','小明','-','85') as result; 
+---------------+
 | result        | 
+---------------+
 | 001-小明-85   | 
+---------------+ 

现在问题来了,本题中有3个字段,需设置2次分隔符,操作比较繁琐。如果有更多字段呢?

所以接下来介绍concat_ws(),不管有多少个字段,只需设置1次分隔符即可。

2. concat_ws()

功能:和concat()一样,将多个字符串连接成一个字符串,但是可以一次性指定分隔符(concat_ws就是concat with separator)

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

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

用法

(1)设置 '-' 作为分隔符

mysql> select concat_ws('-','001','小明','85') as result; 
+---------------+
 | result        | 
+---------------+
 | 001-小明-85   | 
+---------------+ 

(2)设置 ' ' (空格)作为分隔符

mysql> select concat_ws(' ','001','小明','85') as result; 
+---------------+
 | result        | 
+---------------+
 | 001 小明 85   | 
+---------------+ 

假如每个学生都有几个科目(subject 01/02)的成绩,这样同一个学号(id:001)、同一名字(name:小明)会出现多次,只是最后一个字段分数不同(score:85/90)。如何让每个学号、名字都只出现一次呢?

接下来介绍group_concat(),结合group by使用。

3. group_concat()

功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。

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

说明:通过使用distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号。

用法

mysql> select concat_ws('-',id,name,group_concat(score order by subject separator'-')) as result      
from grade      
group by name;  

result:     
001-小明-85-90
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值