sql中的group_concat 和 oracle中的wm_concat

来源:互联网 发布:规则引擎 数据库设计 编辑:程序博客网 时间:2024/05/15 23:50

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.planidGROUP 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.planidGROUP BY T1.name
原创粉丝点击