ORACLE生成累乘积
来源:互联网 发布:北大网络教育毕业证 编辑:程序博客网 时间:2024/06/07 06:58
方法一:
使用窗口函数SUM OVER,用对数相加来模拟乘法操作。
SQL> select empno,ename,sal
2 from emp
3 where deptno=10;
EMPNO ENAME SAL
---------- ---------- ----------
7782 CLARK 2450
7839 KING 5000
7934 MILLER 1300
下面是实现方法
SQL> select empno,ename,sal,
2 exp(sum(ln(sal)) over(order by sal,empno)) as running_prod
3 from emp
4 where deptno=10;
EMPNO ENAME SAL RUNNING_PROD
---------- ---------- ---------- ------------
7934 MILLER 1300 1300
7782 CLARK 2450 3185000
7839 KING 5000 1.5925E+10
注意,在SQL中,对小于等于0的值取对数是无效的。如果表中包含这样的值,一定要避免把这些无效的值传递给SQL的LN函数。
方法二:
ORACLE 10g引入了MODEL子句,在下面的例子中,每个SAL都是负数,这表明累乘积允许出现负值。
SQL> select empno,ename,sal,tmp as running_prod
2 from
3 (
4 select empno,ename,-sal as sal
5 from emp
6 where deptno=10
7 )
8 model
9 dimension by(row_number() over(order by sal desc) rn)
10 measures(sal,0 tmp,empno,ename)
11 rules
12 (
13 tmp[any]=case when sal[currentv()-1] is null then sal[currentv()]
14 else tmp[currentv()-1]*sal[currentv()]
15 end
16 );
EMPNO ENAME SAL RUNNING_PROD
---------- ---------- ---------- ------------
7934 MILLER -1300 -1300
7782 CLARK -2450 3185000
7839 KING -5000 -1.593E+10
- ORACLE生成累乘积
- 【最小乘积生成树 】bzoj2395
- BZOJ2395【最小乘积生成树】
- 二维最小乘积生成树
- 【最小乘积生成树详解】【BZOJ2395】
- bzoj 2395(最小乘积生成树)
- bzoj2395 Timeismoney【最小乘积生成树】
- 【BZOJ】【P2395】【Balkan 2011】【Timeismoney】【题解】【最小乘积生成树】
- 【KM算法】【最大乘积生成树】[HNOI2014] bzoj3571 画框
- 【BZOJ2395】【Balkan 2011】Timeismoney 最小乘积生成树
- bzoj2395: [Balkan 2011]Timeismoney 最小乘积生成树
- [最小乘积生成树 分治] BZOJ 2395 [Balkan 2011]Timeismoney
- oracle tree计算叶子节点到根节点的乘积
- 数组中子数组的最大累乘积
- BZOJ 2395 Balkan 2011 Time is Money 最小乘积生成树
- oracle 中生成随机数
- oracle生成guid
- oracle 生成序列脚本
- 如何执行存储过程以及如何进行调试?
- 索引选择性
- JavaScript --确认对话框confirm
- 使用设计模式构建通用数据库访问类
- PropertyUtils和MethodUtils使用
- ORACLE生成累乘积
- 汉字编码问题
- ORACLE计算累计差
- SSL (Secure Socket Layer)
- 《班级综合管理系统》VB - ACCESS 部分的项目
- MFC 双缓存技术
- Oracle中imp 、exp 命令常用用法
- 数据库复制—— 从SQL Server 2000向SQL Server 2005迁移数据库
- 程序是相通的