group_concat()
能将相同的行组合起来
完整语法
group_concat**(** [DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符’])
使用实例
+------+------+
| id | name |
+------+------+
|id | name |
|1 | 10 |
|1 | 20 |
|1 | 20 |
|2 | 20 |
|3 | 200 |
|3 | 500 |
以id分组,把name字段的值打印在一行,逗号分隔(默认)
select id, group_concat(name) from aa group by id;
+------+--------------------+
| id | group_concat(name) |
+------+--------------------+
|1 | 10,20,20 |
|2 | 20 |
|3 | 200,500 |
+------+--------------------+
指定分隔符
select id,group_concat(name separator '/') from aa group by id;
+------+----------------------------------+
| id | group_concat(name separator ';') |
+------+----------------------------------+
|1 | 10/20/20 |
|2 | 20 |
|3 | 200/500 |
+------+----------------------------------+
去掉冗余值(distinct的使用)
以id分组,把去冗余的name字段的值打印在一行
select id, group_concat(distinct name) from aa group by id;
+------+-----------------------------+
| id | group_concat(distinct name) |
+------+-----------------------------+
|1 | 10,20 |
|2 | 20 |
|3 | 200,500 |
+------+-----------------------------+
排序
以id分组,把name字段的值打印在一行,逗号分隔,以name排倒序
select id,group_concat(name order by name desc) from aa group by id;
+------+---------------------------------------+
| id | group_concat(name order by name desc) |
+------+---------------------------------------+
|1 | 20,20,10 |
|2 | 20 |
|3 | 500,200 |
+------+---------------------------------------+
concat_ws()
concat_ws() 和 concat()一样,是将多个字符串连接成一个字符串,但是可以指定分隔符
语法
concat_ws(separator, str1, str2, …) 第一个参数指定分隔符, 后面依旧是字符串
**注意:**分隔符不能为null,如果为null,则返回结果为null。
使用实例
以逗号分割
select concat_ws(',', pname, page, psex) from per;
+-----------------------------------+
| concat_ws(',', pname, page, psex) |
+-----------------------------------+
| 王小华,30,男 |
| 张文军,24,男 |
| 罗敏,19,女 |
+-----------------------------------+
分隔符指定为null
select concat_ws(null, pname, page, psex) from per;
+------------------------------------+
| concat_ws(null, pname, page, psex) |
+------------------------------------+
| NULL |
| NULL |
| NULL |
+------------------------------------+
find_in_set()
FIND_IN_SET(str, strlist)
str 要查询的字符串
strlist 字段名 参数以”,”分隔 如 (1, 2, 6, 8, 10, 22)
查询字段(strlist)中包含(str)的结果,返回结果为索引位置(索引值从1开始)或null
如果str不在strlist 或 strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL
SELECT FIND_IN_SET('b', 'a,b,c,d'); -- 返回值为2
SELECT FIND_IN_SET('1', '1'); -- 返回值为1
SELECT FIND_IN_SET('2', '1,2'); -- 返回值为2
SELECT FIND_IN_SET('6', '1'); -- 返回0 strlist中不存在str,所以返回0。
SELECT FIND_IN_SET(null, '1'); -- 返回值为null
SELECT FIND_IN_SET('6', null); -- 返回值为null