oracle sql语句实现累加、累减、累乘、累除
2024-10-12 12:30:21
在oracle开发过程中经常会遇到累加、减、乘、除的问题。下面对这个做个小的总结
---创建测试表
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 多行转多列,列值转为列名
- jquery总结06-动画事件03-淡入淡出效果
- ansible写一个简单的playbook
- UVALive 5010 Go Deeper 2sat
- SourceTree工具进行提交合并代码步骤
- scala调用java的方法,返回了一个对象链表List<;Student>;,在scala中遍历该链表获取指定Student的名字name
- android手机连接PC无法正常安装驱动
- Android开发-API指南-<;intent-filter>;
- sql server UI怎么设置自增加id?
- Java设计模式系列之状态模式
- 解读BOM与COM
- linux 文本编辑器 vim 基本操作
- 怎样在WIN7系统下安装IIS和配置ASP(详细)
- Android NDK开发(1)----- Java与C互相调用实例详解
- python学习笔记 loop&;&;raw_input 7&;&; if
- 有关BOM头的一些知识
- [Android] Android RxJava2+Retrofit2+OkHttp3 的使用(一) --基础篇 Retrofit2 的使用
- wcf在post请求时,关于string类型参数传入中文的处理
- 注意C语言 / 要想得到精确结果
- CentOS6.8合并DVD1和DVD2作为本地yum源