【问题标题】:oracle sum of many rows - the value of a single roworacle sum of many rows - 单行的值
【发布时间】:2016-06-21 13:59:29
【问题描述】:

我正在尝试在 oracle 中做一些数学运算,让我返回多行的总和,减去同一张表的不同列中的 1 行的值。这可能吗?

例如,

select sum(column1) - (select column2 from table1 where month = to_date(201505, 'yyyymm')) 从表 1 其中月份 >= to_date(201006, 'yyyymm');

【问题讨论】:

  • 您是否尝试过您的查询?您是否遇到错误或意外行为?
  • @Aleksej: 正要输入完全相同的句子.. Oo 但还要添加,只需要确保where month = to_date(201505, 'yyyymm') 产生单行......但是.. 呃.. 是的。 . :)
  • 不要在 cmets 中发布查询,无法阅读 .. 如果相关 .. 将其发布在原始帖子中 ..
  • 您正在使用没有任何分组的分组功能(SUM);您需要添加一个GROUP BY 子句,按LS_ASSET_ID 分组;此外,正如 DItto 所说,您确定子查询将返回 ONE 值吗?否则你需要用MINMAX 或任何你需要的东西来修改它

标签: sql oracle


【解决方案1】:

可以,但需要与子查询交叉加入。

select
    s.sum1 - t.column2
from (select sum(column1) as sum1 from table1 where month >= to_date('201006','yyyymm') ) s
cross join (select column2 from table1 where month = to_date('201505','yyyymm')) t

【讨论】:

    【解决方案2】:

    相信这是可能的。鉴于您可以识别具有要减去的值的另一列的行,您可以将aggregate 'sum''case' statement 结合使用。

    如果条件匹配,则从第一列中减去相关的第二列,否则不要减去并将第一列中的原始值用于“求和”函数。

    看起来像这样:

    select 
    sum( 
        case (when <condition-normal>) then 
            column_one 
        else 
            column_two - column_one 
            )
    ) from table;
    

    PS:一定要针对不同的数据集进行测试!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-02
      • 2021-03-04
      • 1970-01-01
      • 2021-11-29
      • 2022-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多