Chinaunix首页 | 论坛 | 博客
  • 博客访问: 784953
  • 博文数量: 56
  • 博客积分: 451
  • 博客等级: 下士
  • 技术积分: 1431
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-20 11:14
文章分类

全部博文(56)

文章存档

2013年(35)

2012年(21)

分类: Oracle

2013-06-18 22:12:31

rownum的数据是从1开始生成的
而且记住,rownum是在SQL运行期间生成的

rownum = 1   
For x in ( select * from t )   
Loop   
  if ( rownum = 1 )   
  then   
     output date   
     rownum = rownum+1   
  end if;   
End loop; 

 select * from t where rownum >=5 ; 
这条语句之所以永远不会输出结果是因为rownum必须先从1开始,先由1,然后2.3.....
上面这条语句也即是下面这一条,
rownum = 1   
For x in ( select * from t )   
Loop   
  if ( rownum >= 5 )   
  then   
     output data   
     rownum = rownum+1   
  end if;   
End loop;  
大家分析一下,条件肯定不为真,所以一直不会输出数据

分析函数的格式如下:
分析函数() over (partition by xxx order by yyy)
经过xxx分组和yyy的排序后,计算出分析函数的值
求这几个数的第二大值 9,7,5,3,1
 正解如下:
select x 
 from ( select x, row_number() over ( order by x desc ) r 
          from t 
        ) 
 where r = 2  

阅读(5014) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~