分析函数牛刀小试 (59天)
今天有个同事问我一个问题,想通过一条sql语句完成一个稍显复杂的查询。 结构如下面所示。需要算出tax apply 的值,但是需要汇总charge_amount列和tax_amount列的值
CDL_CRD |
Charge_Amount |
Tax_Amount |
Tax apply |
|
---|---|---|---|---|
50 |
20 |
5 |
50*5/(100+18) |
|
50 |
30 |
6 |
50*6/(100+18) |
|
50 |
50 |
7 |
50*7/(100+18) |
|
Total |
50 |
100 |
18 |
比如第一条数据。
50*5/(100+18) 其中100=20+30+50 18=5+6+7
因为数据量很小,就几千条,所以我决定使用分析函数来,要不按照以前的方法,建临时表之类的还是有些麻烦了。
按照要求建了一个简单的表来测试一下。
SQL> create table test(cdl_crd number,charge_amount number,tax_amount number);
Table created.
SQL> insert into test values(50,20,5);
insert into test values(50,30,6);
1 row created.
SQL>
1 row created.
SQL> insert into test values(50,50,7);
1 row created.
SQL> commit;
Commit complete.
查看数据分布情况,和示例的一样。
SQL> select *from test;
CDL_CRD CHARGE_AMOUNT TAX_AMOUNT
---------- ------------- ----------
50 20 5
50 30 6
50 50 7
开始计算。
SQL> select cdl_crd*tax_amount/sum(tax_amount+charge_amount) over(partition by cdl_crd) apply_amount from test;
APPLY_AMOUNT
------------
2.11864407
2.96610169
2.54237288
关于分析函数确实能省去不少表的自连接带来的困扰,而且性能也不赖,在充分的测试之后使用其实还是很不错的。
- Ruby对象模型总结
- Elasticsearch 管理文档
- Elasticsearch聚合 之 Ip Range IP地址范围聚合
- Elasticsearch聚合 之 DateRange日期范围聚合
- 域名投资大佬Mike Mann以约19.5万美金出售加密货币相关域名
- Elasticsearch聚合 之 Range区间聚合
- Elasticsearch集群管理
- 图m着色问题
- Elasticsearch入门介绍
- Elasticsearch聚合 之 Histogram 直方图聚合
- Elasticsearch聚合 之 Date Histogram聚合
- Elasticsearch聚合 之 Terms
- Elasticsearch聚合初探——metric篇
- AngularJS API之$injector ---- 依赖注入
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法