对分组 table 进行数学运算

Make math operations on a grouped table

我的问题不在于真正的编程语言。

我有一个 ABAP 语言练习,但语言不是很重要。

反正我有一个table:

我需要计算仓位的总成本(显然在 select 之后)。 然后,table 将按两个字段(MATNR 和 BUKRS)分组,因此我需要知道每个组的总成本 MAX、总成本 MIN 和总成本 AVERAGE。

但是我需要一个简单的算法来解决这个问题(伪代码)。

我希望我说的很清楚。

对于 table 聚合,我发现 LOOP 中的 AT 函数非常方便。

根据您需要的维度对您的字段进行排序,并对值进行升序或降序排序。

字段的顺序在这里非常重要,因为 AT 查找指定字段中的更改以及它在同一行中剩余的所有字段。因此,您处理一个组一个组并将组聚合的结果附加到您的结果 table.

LOOP AT lt_itab ASSIGNING <ls_itab>.
  AT NEW bukrs. "at first entry of combination matnr, bukrs
    ls_agg-matnr = <ls_itab>-matnr.
    ls_agg-bukrs = <ls_itab>-bukrs.
  ENDAT.

  TRY.
    ADD <ls_itab>-amount TO lf_sum.
  CATCH cx_sy_arithmetic_overflow.
     lf_sum = 9999.
  ENDTRY.

  lf_count = lf_count + 1.
  IF <ls_itab>-amount > lf_max.
     lf_max = <ls_itab>-amount.
  ENDIF.

  AT END OF bukrs. "after last entry of combination matnr,bukrs
    ls_agg-avg = lf_sum / lf_count.
    ls_agg-max = lf_max.
    APPEND ls_agg TO lt_agged.
    CLEAR: ls_agg, lf_sum, lf_count, lf_max.
  ENDAT.
ENDLOOP.