【问题标题】:How to divide by the result of another query如何除以另一个查询的结果
【发布时间】:2014-01-31 00:06:53
【问题描述】:

这是一个基于之前帖子的单独问题:

[链接]How to calculate Grand Totals when using OVER (partition by ...) using Oracle SQL

我正在使用以下 Oracle SQL 查询:

SELECT JOB_GROUP,
   SUM(PEOPLE) AS CURRENT_PEOPLE
   SUM(PEOPLE) / '100' AS RATIO
FROM MY_VIEW
WHERE MONTH = '01-DEC-2013'
GROUP BY ROLLUP (OB_GROUP)
ORDER BY RATIO DESC;

这个查询给了我这样的输出..

JOB_GROUP    CURRENT_PEOPLE    RATIO
WORKER1     100                1.0
WORKER2     30                 .3
WORKER3     40                 .4
WORKER4     25                 .25
WORKER5     30                 .30
(NULL)      225                2.25

我需要能够将所有比率的总和除以 job_group = 'WORKER1', WORKER2, WORKER4 的比率的总和。例如,我们可以有 5 个不同的 job_groups,但我只需要 1、2 和 4 的比率之和。我怀疑这是某种类型的子查询,但还没有得到正确的结果。

方程看起来像 sum(ratios) / sum(ratio) where worker, 1,2,4。 2.25 / (1.0 + .3 + .25) = .80

感谢您提供的任何帮助,

【问题讨论】:

  • 请提供样本数据和期望的结果。
  • 在这些框中添加表格的秘诀是什么?我查看了高级帮助,但找不到。我认为您或某人已由前一个编辑并很好地组织了它;)感谢您的帮助。
  • 。 .这是一个参考。 . . stackoverflow.com/editing-help。一般来说,如果你在一行的开头放置四个空格,你会在阴影区域得到固定宽度的字体,这对于代码和表格来说都很好。
  • 嗨...我添加了一个带有数据的表格,我希望这使它更清晰一点。这是我需要学习的 SQL 基础,非常感谢。
  • 您从哪里获得0.80 值; 2.25/1.551.45...?您是要为此获得一个数字,还是将计算值作为当前结果集中每一行的额外列? (无论如何,我不了解您当前的“比率”值,但我认为这并不完全相关)。

标签: sql oracle


【解决方案1】:

下面使用解析函数得到worker1的数量:

select JOB_GROUP, CURRENT_PEOPLE,
       CURRENT_PEOPLE / sum(job_group = 'WORKER1' then CURRENT_PEOPLE end) over () as Ratio
from (SELECT JOB_GROUP,
             SUM(PEOPLE) AS CURRENT_PEOPLE
      FROM my_view
      WHERE MONTH = '01-DEC-2013'
      GROUP BY ROLLUP (JOB_GROUP)
     ) t
ORDER BY RATIO DESC;

【讨论】:

  • 这实际上给了我与上面相同的结果。如果我在伪代码中声明查询,它听起来像这样......总比率除以工人 1、2 和 4 的比率之和是多少。我怀疑这可以通过使用复杂的子查询来完成。跨度>
  • 我正在使用您提供的这个查询,并注意到如果我将其更改为按 job_group 分组并添加 where job_group = 'WORKER1',那么我得到 1,无论您为“添加哪个工人” '。
  • 我创建了一个子查询。将分析函数与聚合相结合可能会令人困惑。
猜你喜欢
  • 2011-12-02
  • 1970-01-01
  • 2014-02-21
  • 1970-01-01
  • 2014-08-18
  • 2011-09-16
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多