mysql中group_concat和oracle中LISTAGG

分别在mysql和oracle创建下面两个表  建表语句来源借鉴

create table plan (
id int PRIMARY key,
name varchar(255)
);


-- 创建一个计划明细表,是计划表的子表
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);

排序用法------------------------------------------------------

-- mysql用法

select t1.name ,group_concat(t2.name order by PLANID asc) from plan t1
LEFT JOIN planDetail t2 on T1.id = T2.planid
GROUP BY T1.name

-- oracle达到相同效果的用法

 

select t1.name ,LISTAGG(t1.name,',') within GROUP (order by t2.planid asc) from plan t1
LEFT JOIN planDetail t2 on T1.id = T2.planid GROUP BY T1.name

效果如下;

计划一  明细3,明细2,明细一
计划三  明细3,明细2,明细一
计划二  明细3,明细2,明细一

--------------------------------------------------------

不排序用法

--- mysql

select t1.name ,group_concat(t2.name) from plan t1 LEFT JOIN planDetail t2 on T1.id = T2.planid GROUP BY T1.name

效果如下:

计划一 明细一,明细2,明细3
计划三 明细一,明细2,明细3
计划二 明细2,明细3,明细一

----oracle

select t1.name ,wm_concat(t2.name) from plan t1 LEFT JOIN planDetail t2 on T1.id = T2.planid GROUP BY T1.name

 

效果如下:

计划二 明细一,明细3,明细2
计划三 明细一,明细3,明细2
计划一 明细一,明细3,明细2

转载于:https://www.cnblogs.com/mybugF/p/11202295.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值