我的数据包含日期和总和。 我需要按季度计算销售额。 输出按季度返回销售总额数组, 结果[0]是Q1的销售额,结果1是Q2等的销售额
例如输入'sales':
/// {} => { 0, 0, 0, 0}
/// {(1/1/2010, 10), (2/2/2010, 10), (3/3/2010, 10)} => { 30, 0, 0, 0 }
/// {(1/1/2010, 10), (4/4/2010, 10), (10/10/2010, 10)} => { 10, 10, 0, 10 }
我想出了如何分组,但遗漏了一些问题。
sales.GroupBy(item => ((item.Item1.Date.Month - 1) / 3))
.Select(x => new { Quarter = x.Key, Sum = x.Sum(item => item.Item2) })
一个solution非常好,但我无法管理它的情况
答案 0 :(得分:1)
由于您的数据不一定包含所有季度,因此您应Post.joins(:user).where(users: { first_name: 'Mark' })
将其存储到所有季度的集合中。要创建此类用途left join
:
Enumerable.Range
一些测试数据:
var groupedSales = sales.GroupBy(item => ((item.Date.Month - 1) / 3))
.Select(x => new { Quarter = x.Key,
Sum = x.Sum(item => item.Amount) });
var result = (from quarter in Enumerable.Range(0, 4)
join sale in groupedSales on quarter equals sale.Quarter into grouping
from sale in grouping.DefaultIfEmpty()
select new { Quarter = quarter, Sum = sale?.Sum ?? 0 }).ToList();