分析函数牛刀小试 (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 关于分析函数确实能省去不少表的自连接带来的困扰,而且性能也不赖,在充分的测试之后使用其实还是很不错的。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2014-05-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据架构

Spark SQL / Catalyst 内部原理 与 RBO

从上图可见,无论是直接使用 SQL 语句还是使用 DataFrame,都会经过如下步骤转换成 DAG 对 RDD 的操作

986
来自专栏Aloys的开发之路

SQL Server常用语句

-- 身份证验证(SQLServer) -- 主要验证SQL数据库中已输入的15位 及18位 身份证号码的位数、出生年月日是否正确,可以过滤出大部分的输入错误...

1795
来自专栏崔庆才的专栏

MySQL 枚举类型的“八宗罪”

1274
来自专栏hightopo

基于HTML5的WebGL应用内存泄露分析

632
来自专栏Rindew的iOS技术分享

iOS地图找房(类似链家、安居客等地图找房)

1786
来自专栏HT

基于HTML5的WebGL应用内存泄露分析

上篇我们通过定制了CPU和内存展示界面,体验了HT for Web通过定义矢量实现图形绘制与业务数据的代码解耦及绑定联动,这类案例后续文章还会继续以便大家掌握更...

3139
来自专栏hightopo

HT图形组件设计之道(三)

1133
来自专栏猿人谷

【黑魔法】Covering Indexes、STRAIGHT_JOIN

今天给大家介绍两个黑魔法,这都是压箱底的法宝。大家在使用时,一定要弄清他们的适用场景及用法,用好了,就是一把开天斧,用不好那就是画蛇添足。自从看过耗子哥(左耳朵...

882
来自专栏恰同学骚年

走向面试之数据库基础:一、你必知必会的SQL语句练习-Part 1

本文是在Cat Qi的参考原帖的基础之上经本人一题一题练习后编辑而成,非原创,仅润色而已。另外,本文所列题目的解法并非只有一种,本文只是给出比较普通的一种而已,...

893
来自专栏跟着阿笨一起玩NET

sql纵向表转成横向表

371

扫描关注云+社区