Mysql----group

it2025-03-04  25

函数语法:

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。

最新回复(0)