您的位置:首页 > 数据库 > Oracle

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

2009-03-21 16:15 579 查看
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 快。
也就是说这两种写法出来的值是不同的。
呵呵。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: