mysql中sql语句中常见的group_concat()函数意思以及用法,oracle中与其一样的功能函数是wm_concat()
1、group_concat()
手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果。比较抽象,难以理解。
通俗点理解,其实是这样的:group_concat()会计算哪些行属于同一组,将属于同一组的列显示出来。要返回哪些列,由函数参数(就是字段名)决定。分组必须有个标准,就是根据group by指定的列进行分组。
例子:
-- 创建一个计划表
drop table if exists plan ;
create table plan (
id int PRIMARY key,
name varchar(255)
);
-- 创建一个计划明细表,是计划表的子表
drop table if exists planDetail;
create table planDetail(
id int PRIMARY key,
name varchar(255),
state int,
planId int
);
-- 插入数据
insert into plan values(1,'计划一');
insert into plan values(2,'计划二');
insert into plan values(3,'计划三');
insert into planDetail values(1,'明细一',0,1);
insert into planDetail values(2,'明细2',1,1);
insert into planDetail values(3,'明细3',1,1);
insert into planDetail values(4,'明细一',0,2);
insert into planDetail values(5,'明细2',0,2);
insert into planDetail values(6,'明细3',1,2);
insert into planDetail values(7,'明细一',1,3);
insert into planDetail values(8,'明细2',1,3);
insert into planDetail values(9,'明细3',1,3);
现在要查询每条计划的所有明细的name,就可以使用group_concat()
select t1.name ,group_concat(t2.name) from plan t1
LEFT JOIN planDetail t2 on T1.id = T2.planid
GROUP BY T1.name
2、wm_concat()
oracle中与其一样的功能函数是wmsys.wm_concat()也要配合分组查询group by使用;不使用group by会报错
select t1.name ,wm_concat(t2.name) from plan t1
LEFT JOIN planDetail t2 on T1.id = T2.planid
GROUP BY T1.name