oracle sql语句实现累加、累减、累乘、累除
2017-12-15 14:47
417 查看
在oracle开发过程中经常会遇到累加、减、乘、除的问题。下面对这个做个小的总结
---创建测试表
一、实现累加
二、实现累减
三、实现累乘
四、实现累除
累乘和累除的缺陷是不能对负数进行运算 因为ln(负数)没有意义
---创建测试表
CREATE TABLE TEST( PARENT_ID NUMBER, PART_ID NUMBER, QUALITY NUMBER); INSERT INTO TEST VALUES(1,1,2); INSERT INTO TEST VALUES(1,2,3); INSERT INTO TEST VALUES(1,3,2); INSERT INTO TEST VALUES(1,4,5); INSERT INTO TEST VALUES(2,2,3); INSERT INTO TEST VALUES(2,3,5); INSERT INTO TEST VALUES(2,4,7);
一、实现累加
SELECT T.*, SUM(T.QUALITY) OVER (PARTITION BY T.PARENT_ID ORDER BY T.PART_ID) RUNNING_QUALITY FROM TEST T
二、实现累减
SELECT T.PARENT_ID, T.PART_ID, T.QUALITY, SUM(DECODE(T.RN,1,T.QUALITY,-T.QUALITY)) OVER(PARTITION BY T.PARENT_ID ORDER BY T.PART_ID) RUNNING_PROD FROM ( SELECT T.*, ROW_NUMBER() OVER(PARTITION BY T.PARENT_ID ORDER BY T.PART_ID) RN FROM TEST T) T
三、实现累乘
SELECT T.*, ROUND(EXP(SUM(LN(T.QUALITY)) OVER(PARTITION BY T.PARENT_ID ORDER BY T.PART_ID)),0) RUNNING_PROD FROM TEST T
四、实现累除
SELECT T.PARENT_ID, T.PART_ID, T.QUALITY, EXP(SUM(DECODE(RN,1,LN(T.QUALITY),-LN(T.QUALITY))) OVER(PARTITION BY T.PARENT_ID ORDER BY T.PART_ID)) RUNNING_PROD FROM ( SELECT T.*, ROW_NUMBER() OVER(PARTITION BY T.PARENT_ID ORDER BY T.PART_ID) RN FROM TEST T)T
累乘和累除的缺陷是不能对负数进行运算 因为ln(负数)没有意义
相关文章推荐
- oracle sql语句实现累加、累减、累乘、累除
- oracle sql语句实现累加、累减、累乘、累除
- WMS仓储管理系统实现"收发存日报表"数据查询功能Sql语句--Oracle
- 3大数据库(Sql-Server,MySql和Oracle)的分页SQL语句实现
- oracle下巧用bulk collect实现cursor批量fetch的sql语句
- java代码实现oracle sql语句转mysql sql语句
- MySql的sql语句中添加存储过程或者存储函数来实现Oracle中的start with ……connect by prior……递归(树形结构数据)查询
- Oracle SQL语句实现版本化管理
- SQL语句实现表中字段的组合累加排序
- Oracle创建主键自增表(sql语句实现)及触发器应用
- Oracle中,利用sql语句中的函数实现保留两位小数和四舍五入保留两位小数
- 使用标准SQL语句实现分页操作(Oracle)
- Oracle 查看表空间的大小及使用情况sql语句和oracle增加表空间大小两种实现方法
- mybatise+oracle使用sql语句实现级联批量删除
- 基于ORACLE建表和循环回路来创建数据库存储过程SQL语句来实现
- SQL数据库查询实现行转列与列转行结果SQL语句(适用于SqlServer数据库,oracle需要修改case when语句)
- Oracle SQL语句实现数字四舍五入取整
- SQL语句实现表中字段的组合累加排序
- 给定一个一oracle建表的sql语句,解析读出的字符串,将表名、字段名、字段类型数据取出,怎么实现啊?
- Oracle建表SQL语句实现id自增