首页 > 解决方案 > LINQ 或 SQL:使用不同值的总和进行分组

问题描述

我在 SQL Server 2019 上有一个数据库表,其中包含以多种频率(每天、每周或每月)收集的价格时间序列,我使用 EF Core 3.1 进行查询

我试图提取这些价格,按月汇总,但不会丢失收集频率的信息。

从以下一组数据:

在此处输入图像描述

我试图得到这个,它包含价格的总平均值,按月份分组,以及原始记录的频率。

在此处输入图像描述

这些可以通过使用轻松解决

string.Join(",",s.Select(innerSel=>innerSel.OriginalFrequency).Distinct())

但不幸的是,我不能使用,因为我需要处理IQueryable对象并仅在最后根据页面大小获取数据子集时运行 LINQ 查询的执行,因为之前将查询转换为 List分组意味着从数据库中获取数千条记录。

我试图使用频率的 SUM 和 COUNT 的组合,以便通过将这两个值相乘来轻松理解哪个是原始组合(参见下面的模式),但是 COUNT 和 SUM 应该只计算不同的值,否则,它不会不行。

在此处输入图像描述

有没有办法不以某种方式丢失这些信息,而不会使数据库服务器超载请求不必要的数据或发出多个请求?

这是我卡住的代码:

var aggregatedMonthlyPrices = prices.GroupBy(g => new
    {
        g.DateMonth,
        g.DateYear
    }).Select(s => new
    {
        DateMonth = s.Key.DateMonth,
        DateYear = s.Key.DateYear
        Price=s.Average(avg=>avg.Price),
        FrequencySum= s.Sum(sum=>sum.DataCollectionFrequencyId),
        FrequencyCount = s.Count(),
    });

标签: c#sql-serverlinq

解决方案


推荐阅读