函数语法:
group_concat(),手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果。比较抽象;
group_concat( [DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符’] )
通俗点理解,group_concat()会计算哪些行属于同一组,将属于同一组的列显示出来。要返回哪些列,由函数参数(就是字段名)决定。分组必须有个标准,就是根据group by指定的列进行分组。
案例1.
select id,price from goods;
以id分组,把price字段的值在同一行打印出来,逗号分隔(默认)
select id, group_concat(price) from goods group by id;
以id分组,把price字段的值在一行打印出来,分号分隔
select id,group_concat(price separator ';') from goods group by id;
以id分组,把去除重复冗余的price字段的值打印在一行,逗号分隔
select id,group_concat(distinct price) from goods group by id;
以id分组,把price字段的值去重打印在一行,逗号分隔,按照price倒序排列
select id,group_concat(DISTINCT price order by price desc) from goods group by id;
案例 2
表格 Person
表格 Country
题目 ?
SELECT Country,
GROUP_CONCAT(IF (Country='China',CONCAT_WS(' ', LastName ,FirstName),CONCAT_WS(' ', FirstName, LastName))
ORDER BY ID ASC
SEPARATOR ' | ') AS NAME
FROM ( SELECT * FROM
Country c, Person p WHERE p.ID IN
(c.Name1, c.Name2, c.Name3, c.Name4, c.Name5)) t
GROUP BY Country DESC
IF 表达式
IF( expr1 , expr2 , expr3 )
expr1 的值为 TRUE,则返回值为 expr2
expr1 的值为FALSE,则返回值为 expr3
IF NULL 表达式
IFNULL( expr1 , expr2 )
判断第一个参数expr1是否为NULL:
如果expr1不为空,直接返回expr1;
如果expr1为空,返回第二个参数 expr2
CONCAT_WS 函数
CONCAT_WS(separator,str1,str2,...)
CONCAT_WS()表示并置利用分离器,是CONCAT()的一种特殊形式。第一个参数是其余参数的分隔符。分隔符在连接的字符串之间加入。分隔符可以是一个字符串,用来分隔其余参数。如果分隔符是NULL,则结果为NULL。