原创  数据库学习:oracle的递归写法,分析函数写法,以及teradata的取一定数量记录的写法 收藏

oracle数据库
例子:
递归查询:
select rpad('*',2*level,'*') || ename ename,level
from emp
start with
mgr is null
connect by prior empno = mgr
;
level 是层数,是可以直接用的 一个参数,而start with 是指树的开始,就是根节点。
connect by prior 后面跟的是连接条件。
评价后觉得比SQL server的 写法 简单,更容易了解,SQL server 的到现在我都不理解,虽然我知道怎么使用。
分析函数:
select
   deptno,
   ename,
  
sal,
   sum(sal)  over(partition by deptno order by sal,ename)
cum_sal,
   round(100*ratio_to_report(sal) over (partition by
deptno),1) pct_dept,
   round(100*ratio_to_report(sal) over(),1)
pct_overall
   from emp
   order by
deptno,sal
   ;

这里用到了分析函数,第一个使用partition by 对 deptno 分区后进行计算。
第二个用到了一个百分比 的 用法round(100*ratio_to_report(sal) over (partition by
deptno),1)
这个组合是相辅相成的,ratio_to_report 显然是个计算百分比的函数,但是需要和over 一起使用。
最后两个字段的差别就是按照什么来计算这个百分比,第一个是在deptno这个区间内,而第二个则是全部。

--------
teradata 数据库
top 与 sample 的区别

select top 10 * from table;
select * from table sample 10;

区别,top 是取rownum 前十行的值,而sample则是随机函数随机取出来的值,所以范小亮说,top 快。
也就是说这两种写法出来的值是不同的。
呵呵。

发表于 @ 2009年03月21日 16:15:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:爱从来都不需要理由 | 新一篇:oracle 嵌套循环 yu 哈希连接

  • 发表评论
  • 评论内容:
  •  
Copyright © being21
Powered by CSDN Blog