[英]Analytical function using group by clause
我想将数据分组到某个级别,然后应用解析函数以获取高于此级别的新级别的百分比贡献:
我有一个表Temp_analytic
数据,如下所示。 该表中的数据遵循层次结构(组合和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
我正在使用分析函数按投资组合划分总和
询问
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
请帮忙。
你有正确的主意。 但是,请先使用子查询来汇总数据,然后再使用解析函数:
select inv_num, portfolio, balance,
round(balance/sum(balance) over (partition by portfolio),4.2)*100 as portfolio_perc
from (select inv_num, portfolio, sum(balance) as balance
from Temp_analytic ta
group by inv_num, portfolio
) ta
order by inv_num;
实际上,您可以一次完成此操作-无需子查询。 但是使用分析功能和聚合读取和写入查询需要一些习惯:
select inv_num, portfolio, sum(balance) as balance,
round(sum(balance)/sum(sum(balance)) over (partition by portfolio),4.2)*100 as portfolio_perc
from Temp_analytic ta
group by inv_num, portfolio
order by inv_num;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.