【发布时间】:2014-08-14 19:08:25
【问题描述】:
我想将数据分组到某个级别,然后应用分析函数来获得这个新级别相对于高于此级别的百分比贡献:-
我有一个表Temp_analytic 数据如下。该表中的数据遵循层次结构(portfolio和inv_num是一对多关系,inv_num和loan_num是一对多关系。
Loan_num 累积到 Inv_num 和 inv_num 进一步累积到 Portfolio
所以是贷款级别的基本数据。 我会将数据分组到投资者级别,并希望看到每个投资者对投资组合的贡献百分比
基础数据
Loan_num Inv_num portfolio Balance
1111 1 A 10
2222 1 A 20
3333 1 A 30![enter image description here][1]
4444 2 A 40
5555 2 A 50
6666 2 A 60
7777 3 B 70
8888 3 B 80
9999 3 B 90
我正在使用一个分析函数 Sum over partition by portfolio
查询
select loan_num, inv_num, portfolio, balance, round(balance/sum(balance) over (partition by portfolio),4.2)*100 portfolio_perc
from Temp_analytic
order by portfolio
结果
LOAN_NUM INV_NUM PORTFOLIO BALANCE PORTFOLIO_PERC
1111 1 A 10 4.76
2222 1 A 20 9.52
3333 1 A 30 14.29
4444 2 A 40 19.05
5555 2 A 50 23.81
6666 2 A 60 28.57
7777 3 B 70 29.17
8888 3 B 80 33.33
9999 3 B 90 37.50
所以我能够得到贷款对投资组合的贡献百分比
如果我尝试计算 INV_NUM 对投资组合的贡献百分比。我收到一个错误 “不是按功能分组”使用下面的查询是显而易见的。我想知道的是我们可以将数据汇总或分组到一个级别并应用分析功能(分区到更高级别)吗?
select inv_num, sum(balance), round(balance/sum(balance) over (partition by portfolio),4.2)*100 portfolio_perc
from delete_srini
group by inv_num
order by portfolio
最好的方法是什么
结果应该是这样的
INV_NUM PORTFOLIO BALANCE PORTFOLIO_PERC
1 A 60 28.60
2 A 150 71.40
3 B 240 100.00
请帮忙。
【问题讨论】:
标签: sql