oracle分析函数浅析
2004-08-27 01:19
507 查看
DENSE_RANK(),RANK()区别
说明:DENSE_RANK(),RANK()是oracle自带的分析函数,经常被用于在分组后的组内对某一字段的建立序列的方法,它们的区别在于相同字段值的处理不同
范例:
select deptno,cname,sal,
dense_rank()
over (partition by deptno
order by sal desc) dr,
rank()
over (partition by deptno
order by sal desc) r
from emp
order by deptno,sal desc
/
结果:
DEPTNO ENAME SAL DR R
---------- ---------- ---------- ---------- ----------
10 KING 5000 1 1
10 CLARK 2450 2 2
10 MILLER 1300 3 3
20 SCOTT 3000 1 1
20 FORD 3000 1 1
20 JONES 2975 2 3
20 ADAMS 1100 3 4
30 BLAKE 2850 1 1
30 TURNER 1500 2 2
30 WARD 1250 3 3
30 MARTIN 1250 3 3
30 JAMES 950 4 5
30 ALLEN 600 5 6
分析函数中WINDOWS子句
RANGE
分析的字段必须是日期或数字型,根据当前分析行值进行比较、运算
ROWS
字段可以是任意类型,是行的物理数
WINDOWS子句中的sepcific 字句
UNBOUNDED PRECEDING
排序后从当前分区的第一行开始,结束与正在处理的当前行
CURRENT ROW
从当前行开始(并结束)
NUMERIC EXPRESSION PRECEDING
排序后从当前行之前的数字表达式开始
NUMERIC EXPRESSION FOLLOWING
排序后从当前行直到当前行之后的数字表达式结束
BETWEEN NUMERIC EXPRESSION1 AND NUMERIC EXPRESSION2 FOLLOWING
在以当前行为基准,两个数字的范围内
说明:DENSE_RANK(),RANK()是oracle自带的分析函数,经常被用于在分组后的组内对某一字段的建立序列的方法,它们的区别在于相同字段值的处理不同
范例:
select deptno,cname,sal,
dense_rank()
over (partition by deptno
order by sal desc) dr,
rank()
over (partition by deptno
order by sal desc) r
from emp
order by deptno,sal desc
/
结果:
DEPTNO ENAME SAL DR R
---------- ---------- ---------- ---------- ----------
10 KING 5000 1 1
10 CLARK 2450 2 2
10 MILLER 1300 3 3
20 SCOTT 3000 1 1
20 FORD 3000 1 1
20 JONES 2975 2 3
20 ADAMS 1100 3 4
30 BLAKE 2850 1 1
30 TURNER 1500 2 2
30 WARD 1250 3 3
30 MARTIN 1250 3 3
30 JAMES 950 4 5
30 ALLEN 600 5 6
分析函数中WINDOWS子句
RANGE
分析的字段必须是日期或数字型,根据当前分析行值进行比较、运算
ROWS
字段可以是任意类型,是行的物理数
WINDOWS子句中的sepcific 字句
UNBOUNDED PRECEDING
排序后从当前分区的第一行开始,结束与正在处理的当前行
CURRENT ROW
从当前行开始(并结束)
NUMERIC EXPRESSION PRECEDING
排序后从当前行之前的数字表达式开始
NUMERIC EXPRESSION FOLLOWING
排序后从当前行直到当前行之后的数字表达式结束
BETWEEN NUMERIC EXPRESSION1 AND NUMERIC EXPRESSION2 FOLLOWING
在以当前行为基准,两个数字的范围内
相关文章推荐
- 教为学:Oracle SQL学习之路(四):分析函数之统计(二)
- 使用Oracle的分析函数ROW_NUMBER、DENSE_RANK、RANK
- Oracle 9i 分析函数参考手册
- oracle 分析函数
- Oracle所有分析函数
- oracle 分析函数02 纯属转载---方便查阅
- 教为学:Oracle SQL学习之路(三):分析函数之统计
- 浅谈oracle中row_number() over()分析函数用法
- ORACLE分析函数over(partition by...)中使用case when达到多重分组的效果
- ORACLE分析函数(8)-WIDTH-BUCKET
- oracle分析函数详解
- Oracle分析函数的项目实践实例
- 一、Oracle分析函数入门
- 小学生之Oracle分析函数
- [Oracle]高效的SQL语句之分析函数(一)--sum()
- Oracle 分析函数的使用
- Oracle分析函数
- 常用Oracle分析函数详解
- oracle中LAG()和LEAD()等分析统计函数的使用方法(统计月增长率)
- Oracle分析函数参考手册