加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

oracle中的listagg函数

(2013-12-09 14:58:44)
标签:

sql

it

分类: sql
listagg()函数是oracle11.2的新特性,之前的版本不识别滴。

最基础的用法:

LISTAGG(XXX,XXX) WITHIN GROUP( ORDER BY XXX)

用法就像聚合函数一样,通过Group by语句,把每个Group的一个字段,拼接起来。

心得:LISTAGG()把它当作SUM()函数来使用就可以了。


表:user

id  name grade 

1   a        1

2   b        1

3   c        2

4   d        2

5   e        3

6   f        3

7   g        3

select grade, listagg(name,';') as username within group(order by grade) from user group by grade;

结果:

grade   username

1           a,b

2           c,d

3           e,f,g


同样是聚合函数,还有一个高级用法:

就是over(partition by XXX)

也就是说,在你不实用Group by语句时候,也可以使用LISTAGG函数:

select id,name,grade, listagg(name,';') as username within group(order by grade) over (partition by grade) as username from user;

结果:

id name grade username

1  a         1        a,b

2  b         1        a,b

3  c         2        c,d

4  d        2         c,d

5  e         3        e,f,g

6  f         3        e,f,g

7  g         3        e,f,g



0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有