假设有个表如下:
mysql>select * from student;id name age
1 Dany 24
2 Green 23
3 Henry 23
concat
mysql的concat可以组合显示字段:
mysql> SELECT concat(name,age) FROM studentconcat(name,age)
Dany24
Green23
Henry23
上面就将name和age组合在一起显示了。
concat里面除了可以放字段,还可以放字符串,例如加入逗号来分割name和age:
mysql> SELECT concat(name,',',age) FROM student;
concat(name,',',age)
Dany,24
Green,23
Henry,23
注意:如果concat中有一个字段为NULL,那么整体将会返回NULL。
concat_ws
concat_ws(concat with separator)和concat作用差不多,都是用来组合显示字段的,只不过它可以指定字段间的分割符号:
mysql> SELECT concat_wx('-',name,age) FROM student;concat_wx('-',name,age)
Dany-24
Green-23
Henry-23
concat_ws的第一个参数为分割符,注意:分割符不能为NULL,否则整体都为NULL。
group_concat
group_concat用在group by中,在group by中,只会返回一条数据:
mysql> SELECT name FROM student group by age;name
Dany
Green
例如age为23的人有两个,但是group by只返回了一个,那么如何才能全部显示出来呢?就要用到group_concat:
mysql> SELECT group_concat(name separator '-') FROM student group by age;group_concat(name separator '-')
Dany
Green-Henry
group_concat的主要作用是对group by的产生的没组数据进行去重,排序,显示,完整用法如下:
group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )
coalesce和with rollup
在group by后面加上with rollup可以做一个总统计,一般配合coalesce一起使用,coalesce指的是当字段显示为NULL的时候,用后面的备用字符串显示,coalesce的用法为:coalesce(a,b,c);
mysql> SELECT coalesce(age,'all'),group_concat(name separator '-') FROM student group by age with rollup;coalesce(age,'sum') group_concat(name separator '-')
24 Dany
23 Green-Henry
all Dany-Green-Henry
如果只是加with rollup,会有统计功能,但是age那一项会是空的。加了coalesce后,当age是空的时候,就会显示all。