【oracle中】LISTAGG WITHIN GROUP BY 函数的用法

CREATE TABLE aaa (
age NUMBER,-- 年龄
name1 VARCHAR2(20) --姓名
)

插入数据

INSERT INTO aaa VALUES(23,'张三');
INSERT INTO aaa VALUES(24,'李四');
INSERT INTO aaa VALUES(23,'刘武');
INSERT INTO aaa VALUES(24,'贾静雯');
INSERT INTO aaa VALUES(23,'张伟大');
INSERT INTO aaa VALUES(27,'默默');
INSERT INTO aaa VALUES(29,'刘嘉玲');
INSERT INTO aaa VALUES(23,'张博智');
INSERT INTO aaa VALUES(32,'谢霆锋');
INSERT INTO aaa VALUES(32,'陈志忠');
INSERT INTO aaa VALUES(33,'阿娇');
INSERT INTO aaa VALUES(33,'人生');

查询结果:

SELECT * FROM aaa ORDER BY age ASC;

23 张三

23 刘武

23 张伟大

23 张博智

24 李四

24 贾静雯

27 默默

29 刘嘉玲

32 谢霆锋

32 陈志忠

33 人生

33 阿娇

想要的表结果

23 刘武-#-张博智-#-张三-#-张伟大

24 贾静雯-#-李四

27 默默

29 刘嘉玲

32 陈志忠-#-谢霆锋

33 阿娇-#-人生

sql如下:

SELECT

age,LISTAGG(CPD.Name1,’-#-‘) WITHIN GROUP(ORDER BY name1 ASC )

FROM aaa CPD GROUP BY age;

解释:

LISTAGG的第一个参数为要统计的列名称,

第二个参数’-#-‘是连接符合,

WITH GROUP括号内的order by为统计的列的排序方式:是正序还是倒序

最终的表结果

23刘武-#-张博智-#-张三-#-张伟大 24贾静雯-#-李四 27默默 29刘嘉玲 32陈志忠-#-谢霆锋 33阿娇-#-人生

0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论