为糟糕的标题道歉,我不确定什么是好的标题。
这是当前(简化视图)我正在使用的数据
Agent | Commission
---------|------------
Smith | 100
Neo | 200
Morpheus | 300
Run Code Online (Sandbox Code Playgroud)
我需要计算总佣金的百分比,每个代理负责。
因此,对于特工 Smith,百分比将计算为 (Agent Smith's commission / Sum(commission)*100
所以,我的预期数据是
Agent | Commission | % Commission
---------|---------------|---------------
Smith | 100 | 17
Neo | 200 | 33
Morpheus | 300 | 50
Run Code Online (Sandbox Code Playgroud)
我有一个函数返回每个代理的佣金。我有另一个函数将百分比返回为(Commission/Sum(Commission))*100
. 问题是Sum(commission)
对每一行都进行计算,并且鉴于此查询将在数据仓库上运行,数据集会相当大(目前,只有不到 2000 条记录),老实说,这是一种糟糕的方法(IMO )。
有没有一种方法可以Sum(Commission)
不为获取的每一行计算?
我在考虑两部分查询的内容,第一部分将获取sum(commission)
到包变量/类型,第二部分将引用此预先计算的值,但我不确定如何完成此操作。
我只能使用 SQL,而且我在 Oracle 10g R2 上运行。
我需要一个解决方案来隐藏表中的特定列。我们有些人需要针对此数据库构建报告,特别是其中一些包含机密信息的表,但不允许查看薪水或社会保险金等项目。是否可以为用户过滤特定列?
从这个初始数据:
select level as foo, mod(ora_hash(level),4) as bar from dual connect by level<9;
/*
FOO BAR
---------------------- ----------------------
1 3
2 2
3 3
4 3
5 2
6 0
7 3
8 2
*/
Run Code Online (Sandbox Code Playgroud)
我想获取foo, bar, prev_foo
每一行prev_foo
的值,其中是foo
最近的“上一个”行(由foo
唯一的排序定义)的值,使得bar
该行中的值大于bar
当前行中的值。换句话说,我想要这个结果:
/*
FOO BAR PREV_FOO
---------------------- ---------------------- ----------------------
1 3
2 2 1
3 3
4 3
5 2 4
6 0 5
7 3
8 2 7
*/
Run Code Online (Sandbox Code Playgroud)
我如何实现这一目标?