使用Linq.js在多个JSON数据字段上使用SUM和GROUP BY

时间:2015-12-14 08:04:40

标签: jquery json linq.js

我有一个JSON数据,我需要分组并对数据求和。让我们说我有一个json对象,看起来像这样:

Company: 
   1. ABC --Focus -- 1.Operate  -- Completed :70 ,Remaining:75
                     2.Improve    -- Completed:100 ,Remaining:75
                     3.Optimize -- Completed:50 ,Remaining:25

   2. DEF--Focus-- 1.Operate  -- Completed:50 ,Remaining:25
                   2.Optimize -- Completed:100 ,Remaining:75  

   3. XYZ--Focus-- 1.Innovate  -- Completed:100 ,Remaining:75
                   2.Operate    -- Completed:100 ,Remaining:50
                   3.Optimize -- Completed:20 ,Remaining:50 

output

output ::数组内的数组,第一个数组应包含公司,并在另一个数组中包含我的焦点区域已完成和剩余数据的总和。

  var resultxyz = Enumerable.From(dataString).GroupBy("$.Company", null,
    function (key, g) {
    var resultxyz = {
        z: key,
        totalCompleted: g.Sum("$.Completed"),
        totalRemaining: g.Sum("$.Remaining")

    }
    return resultxyz ;
}).ToArray();

我已尝试过以下查询来实现此目的:

{{1}}

但这仅限于我必须关注的公司。 任何想法或建议都会有很大的帮助。

1 个答案:

答案 0 :(得分:1)

基本上你正在寻找一个双层分组。首先是所有公司的整体分组,以及每个组内的一组焦点。有许多不同的方式可以建模,但最直接的方式是:

var query = Enumerable.From(data)
    .GroupBy("$.Company", null,
        function (key, g) {
            return {
                Company: key,
                Result: Enumerable.From(g)
                    .GroupBy("$.Focus", null,
                        "{ Focus: $, Completed: $$.Sum('Number($.Completed)'), Remaining: $$.Sum('Number($.Remaining)') }"
                    )
                    .ToArray()
            };
        }
    )
    .ToArray();

请注意使用Number()功能。由于CompletedRemaining属性是字符串,因此获取总和将无法按预期工作。我们需要事先将它们转换为数字。