前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分析函数牛刀小试 (59天)

分析函数牛刀小试 (59天)

作者头像
jeanron100
发布2018-03-14 10:09:39
5600
发布2018-03-14 10:09:39
举报

今天有个同事问我一个问题,想通过一条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 因为数据量很小,就几千条,所以我决定使用分析函数来,要不按照以前的方法,建临时表之类的还是有些麻烦了。 按照要求建了一个简单的表来测试一下。

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2014-05-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档