【问题标题】:how to do a sum weighted in a datatable?如何在数据表中进行加权求和?
【发布时间】:2012-02-08 14:09:04
【问题描述】:

我有一个这样的数据表:

Date     Qty    Price 
----------------------
12/07    10      2
12/09    20      3
12/05    12      2
12/05    8       6
8/9      85      56

如果我们有 2 行具有相同的日期,我想计算两列的加权价格。所以数据表变成了:

Date     Qty         Price 
----------------------------
12/07    10          2
12/09    20          3
12/05    20 (12+8)   3.6 (12*2 + 8*6)/(12+8)
8/9      85          56

【问题讨论】:

    标签: c# datatable


    【解决方案1】:
    SELECT Date, SUM(Qty), SUM(QtyPrice)/SUM(Qty)
    FROM
    (
      SELECT Date, Qty, Qty * Price AS QtyPrice
      FROM Table
    )
    GROUP BY Date
    

    应该这样做

    在 C# 中:

    var groups = table.AsEnumerable().
                       GroupBy(row => row.Field<DateTime>("Date")).
                       Select(group => new 
                       { 
                         Date = group.Key, 
                         Quantity = group.Sum(item => item.Qty),
                         Price = group.Sum(item => item.Qty * item.Price)
                       });
    

    【讨论】:

    • 我忘了告诉我我正在用 c# 编码
    • @francopshenri 我已经相应地更新了我的答案(您需要 .net >= 3.5 才能使用 linq 到数据集)
    • 实际上,我想要做的是计算加权平均价格,如果在我的情况下有 2 行具有相同的日期:对应于日期 12/05 的行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    • 2021-11-14
    • 1970-01-01
    • 2021-01-16
    相关资源
    最近更新 更多