分析函式牛刀小試
今天有個同事問我一個問題,想透過一條sql語句完成一個稍顯複雜的查詢。
結構如下面所示。需要算出tax apply 的值,但是需要彙總charge_amount列和tax_amount列的值
比如第一條資料。
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
關於分析函式確實能省去不少表的自連線帶來的困擾,而且效能也不賴,在充分的測試之後使用其實還是很不錯的。
結構如下面所示。需要算出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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8494287/viewspace-1349347/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 分散式鎖--Redis小試牛刀分散式Redis
- aix小試牛刀AI
- FLEX小試牛刀Flex
- nodejs redis 小試牛刀NodeJSRedis
- vite plugins小試牛刀VitePlugin
- ElasticSearch學習一-小試牛刀Elasticsearch
- Java11 HttpClient小試牛刀JavaHTTPclient
- spring篇(一)牛刀小試Spring
- Jmeter介面測試例項-牛刀小試JMeter
- Laravel 事件系統(一)、小試牛刀Laravel事件
- mysql儲存過程小試牛刀MySql儲存過程
- Vue.js 牛刀小試(持續更新~~~)Vue.js
- Android開發之Retrofit小試牛刀Android
- oracle函式測試小記Oracle函式
- 【小試牛刀】Stage-2 裝飾器初探
- 小試牛刀ElasticSearch大資料聚合統計Elasticsearch大資料
- 我的Promise祕密初探之小試牛刀Promise
- ★Linux磁碟配額的使用 ★——牛刀小試Linux
- MySQL資料匯入匯出牛刀小試MySql
- oracle分析函式_小貼(一)Oracle函式
- Golang框架beego電影網爬蟲小試牛刀Golang框架爬蟲
- Golang框架Beego在Windows環境下小試牛刀Golang框架Windows
- constraintayout新功能montionLayout寫動畫小試牛刀AI動畫
- python小試牛刀: K-best演算法Python演算法
- 【小白學PyTorch】8 實戰之MNIST小試牛刀PyTorch
- Oracle分析函式七——分析函式案例Oracle函式
- Flink Window分析及Watermark解決亂序資料機制深入剖析-Flink牛刀小試
- Oracle聚合函式/分析函式Oracle函式
- 分析函式函式
- 函式小結函式
- Cocos2d-x 小試牛刀五子連珠遊戲遊戲
- 現代IT基礎設施管理(1):Terraform初識和小試牛刀ORM
- 【分析函式】Oracle分析函式之LAG和LEAD函式Oracle
- Flink Restart Strategies重啟策略機制深入剖析-Flink牛刀小試REST
- 分析函式概述函式
- 分析函式 over函式
- Oracle 分析函式Oracle函式
- 分析函式 - LAG函式