标签: oracle-10g-r2

计算一行占总和的百分比

为糟糕的标题道歉,我不确定什么是好的标题。

这是当前(简化视图)我正在使用的数据

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 上运行。

aggregate oracle-10g-r2

15
推荐指数
3
解决办法
10万
查看次数

列级安全

我需要一个解决方案来隐藏表中的特定列。我们有些人需要针对此数据库构建报告,特别是其中一些包含机密信息的表,但不允许查看薪水或社会保险金等项目。是否可以为用户过滤特定列?

oracle security oracle-10g-r2 vpd

9
推荐指数
1
解决办法
1853
查看次数

获取最近的具有更高“bar”的前一行的“foo”值

从这个初始数据:

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)

我如何实现这一目标?

oracle oracle-10g-r2

5
推荐指数
1
解决办法
208
查看次数

标签 统计

oracle-10g-r2 ×3

oracle ×2

aggregate ×1

security ×1

vpd ×1