GROUP_CONCAT()
将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])
例1:对于每个球队,得到其编号和所有球员的编号
mysql> select name,group_concat(id order by id desc separator ',') 'group_concat'
-> from t1
-> group by name;
+--------+------------------------+
| name | group_concat |
+--------+------------------------+
|老王 | 83,57,44,8,6,2 |
|张三 | 112,104,27,8 |
+--------+------------------------+
2 rows in set (0.01 sec)
如果没有group by子句,group_concat返回一列的所有值
例2:得到所有的罚款编号列表
mysql> select group_concat(paymentno)
-> from PENALTIES;
+-------------------------+
| group_concat(paymentno) |
+-------------------------+
| 1,2,3,4,5,6,7,8 |
+-------------------------+
1 row in set (0.00 sec)
concat()函数
将多个字符串连接成一个字符串。concat(str1, str2,...)
返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。
如果要指定分隔符,需要concat('111', ',' ,'222' ',' ,'333')
一个个拼接
concat_ws()函数
将多个字符串连接成一个字符串,可以指定分隔符(concat_ws就是concat with separator)。concat_ws(separator, str1, str2, ...)
第一个参数指定分隔符。需要注意的是分隔符不能为null,如果为null,则返回结果为null。
附:参数判断coalesce()
返回参数中的第一个非空表达式(从左向右依次类推),是一个可变参函数,可以使用多个参数。
接受多个参数,返回第一个不为NULL的参数,如果所有参数都为NULL,此函数返回NULL;当它使用2个参数时,和IFNULL
函数作用相同。
IFNULL(expression, alt_value) 如果第一个参数的表达式 expression 为 NULL,则返回第二个参数的备用值。
SELECT IFNULL(NULL,'test'); #test
SELECT IFNULL('wang','test'); #wang
SELECT IFNULL(NULL,NULL); #NULL
SELECT COALESCE('wang','test'); #wang
SELECT COALESCE(NULL,'test'); #test
SELECT COALESCE('wang','test','test1','test2'); #wang
SELECT COALESCE(NULL,NULL,NULL,'test2'); #test2
SELECT COALESCE(NULL,NULL,NULL,NULL); #NULL