码迷,mamicode.com
首页 > 数据库 > 详细

oracle 窗口函数over

时间:2015-12-21 18:00:56      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:

 

select max(字段1),over(partition by  字段2,字段3) from table ;--根据字段2和字段3分区取出字段1的最大的

相当于  

select max(字段1) from table  group by  字段2,字段3;

不过上面的sql会列出所有的行数,然后每一行多一个字段,字段值是一样的

这里的max 可以相应的改成min,avg,sum() 等等

 

但是如果出现 

select 字段2,字段3  max(字段6) over (partition by  字段2,字段3 )from table  group by  字段2,字段3,字段5;

会报错的,因为max中的字段6没有在group 中。

可以使用子语句嵌套一下 让最顶层的select 不要出现group BY (SELECT * MAX() OVER() (SELECT .. FROM TABLE GROUP BY ..)  )

正确写法是

 

select t.*  max(字段6) over (partition by  字段2,字段3 )

 from

(select 字段2,字段3,字段5,字段6 from table  group by  字段2,字段3,字段5,字段6)t;

这样每个字段2,字段3相同的值后面多一个相同的值

想要的结果应该是

select 字段2,字段3,字段5,maxp  from (

select t.*  max(字段6) over (partition by  字段2,字段3 ) maxp from (select 字段2,字段3,字段5,字段6 from table  group by  字段2,字段3,字段5,字段6)t

)tt

group by 字段2,字段3,字段5,maxp 

可以使用子语句嵌套一下

 

oracle 窗口函数over

标签:

原文地址:http://www.cnblogs.com/wlzhang/p/5063913.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!