select 部门,sum(a项销售额),sum(b项销售额),
RATIO_TO_REPORT(sum(a项销售额)) OVER () AS a占销售总额比例,
RATIO_TO_REPORT(sum(b项销售额)) OVER () AS b占销售总额比例
from table
group by 部门;
RATIO_TO_REPORT(sum(a项销售额)) OVER () AS a占销售总额比例,
RATIO_TO_REPORT(sum(b项销售额)) OVER () AS b占销售总额比例
from table
group by 部门;
解决方案 »
- Oracle->Access 表链接 更新
- 普通用户,如何查询oracle当前schema里面有多少个tablespace的名字?
- 无法定位程序输入点于动态库orageneric10.dll上
- Oracle Application Server 10g RedHat 5 下安装方法
- 一个存储老是有问题,请大家帮忙解决一下
- 关于update的用法
- 在Redhat7.3下安装oracle9.2必须先安装jdk吗?
- 备份软件TSM问题
- oracle的统计查询前10
- ORA-01735: 无效的 ALTER TABLE 选项(Oracle SQL )
- 有关存储过程的问题
- 我用PowerDesigner10和ER/Studio6.5的反向工程都不能得到视图的Trigger,为什么?
over后面没有条件,应该是求占总量的比例。这是oracle在8.1.6以后的Enterprise Edition支持的新功能。我现在的环境没法执行,等我晚上回家后测试一下,把结果发上来。
SQL> select * from t1; A项销售额 B项销售额 销售总额
- ---------- ---------- ----------
A 1 1 2
B 3 3 6
C 5 5 10
B 2 2 4
A 6 4 10SQL> select
2 a.部门,a.a项销售额之和,a.b项销售额之和,b.a占销售总额比例,b.b占销售总额比
例
3 from
4 (select 部门,sum(a项销售额) a项销售额之和,sum(b项销售额) b项销售额之和 fr
om t1 group by 部门) a,
5 (select 部门,sum(a项销售额/(select sum(销售总额) 销售总额 from t1)) a占销
售总额比例,
6 sum(b项销售额/(select sum(销售总额) 销售总额 from t1)) b占销
售总额比例 from t1 group by 部门) b
7 where a.部门=b.部门; A项销售额之和 B项销售额之和 A占销售总额比例 B占销售总额比例
- ------------- ------------- --------------- ---------------
A 7 5 .21875 .15625
B 5 5 .15625 .15625
C 5 5 .15625 .15625
fightintokyo(黑龙),你好,我又用你的方法仔细测试了一下,你得到的a占销售总额比例分别是:对A部门结果是:(1+6)/(1+3+5+2+6),即分母是"项销售额"一列的和,而我要的是"销售总额"的和,即:(1+6)/32你不妨试一下就知道了
zmgowin(隐者(龙祖宗)) 的方法是正确的,就是太复杂了,我的表有15列(a,b,c,.......)
照你的写法要很长,不过终于能实现了!!!!
原理是 各项部门别占销售总额比例 = 各项部门别占各项销售总额比例 * 各项总额占销售总额比例Select 部门, a项销售额, b项销售额, 销售总额,
a项总额占销售总额比例* a项部门别销售比例 as a占销售总额比例,
b项总额占销售总额比例* b项部门别销售比例 as b占销售总额比例
From ( select sum(a项销售额)/ sum(销售总额) as a项总额占销售总额比例,
sum(b项销售额)/ sum(销售总额) as b项总额占销售总额比例,
sum(销售总额) as销售总额
from table
),
( select 部门,
sum(a项销售额) as a项销售额,
sum(b项销售额) as b项销售额,
RATIO_TO_REPORT(sum(a项销售额)) OVER () AS a项部门别销售比例,
RATIO_TO_REPORT(sum(b项销售额)) OVER () AS b项部门别销售比例
from table
group by 部门
);特别是如果你想求某一段时间内的各项部门别占销售总额比例时,在OVER ()中指定条件就OK了。