首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何通过数组中嵌套的key进行分组,并在javascript中计算sum,avg?

在JavaScript中,可以通过数组中嵌套的key进行分组,并计算sum和avg。下面是一个实现的示例代码:

代码语言:txt
复制
// 原始数据
const data = [
  { category: 'A', value: 10 },
  { category: 'B', value: 20 },
  { category: 'A', value: 30 },
  { category: 'B', value: 40 },
  { category: 'C', value: 50 }
];

// 分组并计算sum和avg
const result = data.reduce((acc, obj) => {
  const key = obj.category;
  if (!acc[key]) {
    acc[key] = { sum: 0, count: 0 };
  }
  acc[key].sum += obj.value;
  acc[key].count++;
  return acc;
}, {});

// 计算avg
Object.keys(result).forEach(key => {
  result[key].avg = result[key].sum / result[key].count;
});

console.log(result);

上述代码中,我们使用reduce方法对原始数据进行遍历和分组。通过category作为分组的key,累加每个分组的value值,并记录每个分组的元素个数。最后,通过遍历结果对象,计算每个分组的平均值(avg)。

这个问题涉及到了JavaScript中的数组操作和对象操作。在实际开发中,可以根据具体需求进行适当的优化和扩展。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

快速学习ES6-聚合aggregations

… 综上所述,我们发现bucket aggregations 只负责对数据进行分组,并不进行计算,因此往往bucket中往往会嵌套另一种聚合:metrics aggregations即度量 度量(metrics...) 分组完成以后,我们一般会对组中的数据进行聚合运算,例如求平均值、最大、最小、求和等,这些在ES中称为度量 比较常用的一些度量聚合方式: Avg Aggregation:求平均值 Max Aggregation...可以看到每个桶中都有自己的avg_price字段,这是度量聚合的结果 4.4 桶内嵌套桶 刚刚的案例中,我们在桶内嵌套度量运算。事实上桶不仅可以嵌套运算, 还可以再嵌套其它桶。...桶和avg计算我们不变 maker:在嵌套的aggs下新添一个桶,叫做maker terms:桶的划分类型依然是词条 filed:这里根据make字段进行划分 部分结果: ......我们可以看到,新的聚合maker被嵌套在原来每一个color的桶中。 每个颜色下面都根据 make字段进行了分组 我们能读取到的信息: 红色车共有4辆 红色车的平均售价是 $32,500 美元。

1.6K10

【Java 进阶篇】深入理解 SQL 聚合函数

聚合函数通常与 GROUP BY 子句结合使用,以根据一个或多个列对数据进行分组,并在每个分组上执行聚合计算。 2....使用 GROUP BY 子句进行分组 在许多情况下,我们希望对数据进行分组并在每个分组上执行聚合函数,以便更细致地分析数据。这时就需要使用 GROUP BY 子句。...以下是一些总结和注意事项: 常见的 SQL 聚合函数包括 COUNT()、SUM()、AVG()、MAX() 和 MIN()。 GROUP BY 子句用于将结果集分组,并在每个分组上执行聚合函数。...HAVING 子句用于在分组后对结果进行过滤。 SQL 允许嵌套聚合函数,以进行更复杂的计算。 使用 DISTINCT 关键字可以确保只考虑唯一的值进行聚合计算。...使用 GROUP BY 子句将数据分组,以便按照特定的标准进行摘要。 使用 HAVING 子句对分组后的数据进行过滤,只选择符合条件的分组。 嵌套聚合函数时,确保计算的顺序和逻辑正确。

58640
  • elasticsearch 聚合 : 指标聚合、桶聚合、管道聚合解析使用总结

    常用类型: Sum:计算字段的总和。 Avg:计算字段的平均值。 Min/Max:查找字段的最小值和最大值。...Bucket Aggregations(桶聚合) 概述:桶聚合类似于SQL中的GROUP BY操作,它将文档分组到不同的桶中,并对每个桶中的文档进行聚合计算。...常用类型: Avg Bucket:计算每个桶的平均值,通常用于对分组数据进行平均值分析。 Sum Bucket:计算每个桶的总和,适用于对分组数据进行求和操作。...通过查询语句过滤出符合条件的文档集合,然后对这些文档进行聚合分析,可以得到更加准确和有用的结果。 嵌套聚合:Elasticsearch支持嵌套聚合,即在一个聚合内部可以包含其他聚合。...基于key排序:对于Terms聚合,可以使用_key字段对桶的键(即分组字段的值)进行排序。这有助于按字母顺序或数值顺序展示分组数据。

    93510

    ES入门:查询和聚合

    "buckets": 这是分桶(buckets)的数组,包含了每个分组的信息。 每个"bucket"包括以下信息: "key": 分组的键,即"state.keyword"字段的值。...涉及到的就是在对state分组的基础上,嵌套计算avg(balance): GET /bank/_search { "size": 0, "aggs": { "group_by_state..."average_balance": 这是嵌套聚合的名称,用于计算每个州的平均账户余额。 "avg": 这是嵌套聚合的类型,表示计算平均值。...聚合结果排序 通过在aggs中对嵌套聚合的结果进行排序 对嵌套计算出的avg(balance),这里是average_balance,进行排序 GET /bank/_search { "size":..."average_balance": 这是嵌套聚合的名称,用于计算每个州的平均账户余额。 "avg": 这是嵌套聚合的类型,表示计算平均值。

    79490

    一起学Elasticsearch系列-聚合查询

    常见的指标聚合包括 Sum、Avg、Min、Max、Stats 等。...指标聚合 在 Elasticsearch 中,指标聚合是对数据进行统计计算的一种方式,例如求和、平均值、最小值、最大值等。以下是一些常用的指标聚合类型: avg:计算字段的平均值。...sum:计算字段的总和。 min:查找字段的最小值。 max:查找字段的最大值。 count:计算匹配文档的数量。 stats:提供了 count、sum、min、max 和 avg 的基本统计。..."avg_price" 是一个嵌套在 "sales_per_month" 下的 avg 聚合,用于计算每月的平均销售价格。...nested 类型允许你将一个文档中的一组对象作为独立的文档进行索引和查询,这对于拥有复杂数据结构(例如数组或列表中的对象)的场景非常有用。

    69220

    Elasticsearch的R在这里,查询与聚合

    _score相关性,它不进行此项计算,故比query查询快 例如: 条件: 年龄在10到50,性别是男 性别一定不能是女 id是1~8的或者职位带有...,数组里面记录了匹配的文档,比如一个索引下面有两个文档,进行过滤,一个匹配,一个不匹配,那么数组是这样的[1,0],匹配的文档为1。...在频繁查询的时候,建议用过滤而不是索引。 过滤跟查询的请求体基本相似,只不过多嵌套了一层filtered。...,类似与关系型数据库中的group by,当然还有很多其他的聚合,例如取最大值、平均值等等。...} ] } } } (3)filter聚合,过滤器聚合,对符合过滤器中条件的文档进行聚合 【sql】 select sum(age) from company

    3.2K30

    Oracle 分组函数

    )和DISTINCT(COLUMN)之外,其他所有分组函数都会忽略列表中的空值,然后再进行计算 在分组函数中使用NVL函数可以使分组函数强制包含含有空值的记录 select avg(sscore) from...select sclass,sum(sscore) from stu_class group by sdept,sclass; 按多列分组的GROUP BY子句 --按照多列进行分组查询求平均值 select...' group by sdept,sclass having avg(nvl(sscore,0))>60; 组函数的嵌套 与单行函数不同,组函数只能嵌套两层 --嵌套后就不能在查询列表中查分组函数意外的其他列了...通过WHERE子句进行非分组函数筛选判断 通过GROUP BY子句完成分组操作 通过HAVING子句完成组函数筛选操作 通过SELECT子句选择显示的列或表达式及组函数 ...通过ORDER BY子句进行排序操作

    43930

    ES服务 聚合查询之Bucket聚合详解

    进而引入了两个概念: 桶(Buckets) 满足特定条件的文档的集合 指标(Metrics) 对桶内的文档进行统计计算 所以ElasticSearch包含3种聚合(Aggregation)方式 桶聚合(...这个新的聚合层让我们可以将 avg 度量嵌套置于 terms 桶内。...": { "avg": { "field": "price" } } } } } } 结果如下: 对filter进行分组聚合:filters 设计一个新的例子, 日志系统中,每条日志都是在文本中...sum 度量嵌套在每个售价区间内,用来显示每个区间内的总收入。 如我们所见,查询是围绕 price 聚合构建的,它包含一个 histogram 桶。...接着,我们在直方图内定义嵌套的度量,这个 sum 度量,它会对落入某一具体售价区间的文档中 price 字段的值进行求和。

    54020

    学好Elasticsearch系列-聚合查询

    指标聚合 在 Elasticsearch 中,指标聚合是对数据进行统计计算的一种方式,例如求和、平均值、最小值、最大值等。以下是一些常用的指标聚合类型: avg:计算字段的平均值。...sum:计算字段的总和。 min:查找字段的最小值。 max:查找字段的最大值。 count:计算匹配文档的数量。 stats:提供了 count、sum、min、max 和 avg 的基本统计。..."avg_price" 是一个嵌套在 "sales_per_month" 下的 avg 聚合,用于计算每月的平均销售价格。...nested 类型允许你将一个文档中的一组对象作为独立的文档进行索引和查询,这对于拥有复杂数据结构(例如数组或列表中的对象)的场景非常有用。...} } } } 在上述例子中,我们首先通过 match 查询找到描述中包含 "laptop" 的所有产品,然后对这些产品的价格进行平均值聚合。

    49320

    MongoDB高级操作(管道聚合)

    一、 聚合aggregate 聚合(aggerate)主要用于计算数据,类似于SQL中的sum(),avg(),聚合aggregate是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)...组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果。...方法:db.stu.aggergate({管道:{表达式}}),如图: 二、管道(grep) 在MongoDB中,文档处理完毕后,通过管道进行下一次处理,常用管道如下: $group:将集合中的文档分组...常用表达式 $sum:计算总和,$sum:1同count表示计数 $avg: 计算平均值 $min: 获取最小值 $max:获取最大值 $push:在结果文档中插入值到一个数组 $first:根据资源文档的排序获取第一个文档数据...$group注意点: 1、分组需要放在“_id”后面 2、对应的字典中有几个键,结果就有几个键 3、取不同字段的值需要使用”$age”,”$gender’ 4、取字典嵌套的字典中的值时,$_id.country

    3.3K11

    Elasticsearch聚合学习之四:结果排序

    本文是《Elasticsearch聚合学习》系列的第四篇,在前面的实战中,聚合的结果以桶(bucket)为单位,放在JSON数组中返回,这些数据是没有排序的,今天来学习如何给这些数据进行排序; 系列文章列表...按照metrics排序(metrics结果只有一个值) 常见的metrics有累加和(sum)、最大值(max)、最小值(min)、平均值(avg),这些metrics的特点是处理结果只有一个值,我们可以按照这个结果来排序..." : 0, "buckets" : [ ---这个JSON数组内是按照品牌聚合而成的所有桶 { "key...嵌套桶排序 在聚合查询中,经常对聚合的数据再次做聚合处理,例如统计每个汽车品牌下的每种颜色汽车的销售额,这时候DSL中就有了多层aggs对象的嵌套,这就是嵌套桶(此名称来自《Elasticsearch...嵌套桶的排序情况略为复杂,详情请参考《Elasticsearch聚合的嵌套桶如何排序》; 至此,聚合返回结果排序的实战已经完成了,后面的章节会深入学习es的聚合有关的关键知识点;

    7.8K30

    触类旁通Elasticsearch:聚合

    图1 词条桶型聚合允许在其中嵌套其它聚合 自上而下看图1,如果使用terms聚合获得最为流行的分组标签,同样可以获得每个标签分组的平均成员数量,还可以让ES提供每个标签每年创建的分组数量...(1)统计数据 通常来说,使用ES查询可以构建一个script字段,在其中放入一小段代码,为每篇文档返回一个数组。在下面的代码中,用脚本计算参与者数量,数值是参与者数组的元素数量。...,而所有统计数据都是通过该文档集合中的数值计算而来,所以总是具有100%的准确性。...(3)近似统计 某些统计可以通过查看文档中的某些数值,良好地进行计算,尽管不是100%准确,这将会减少执行的时间和内存消耗。下面的代码计算参与者的80百分位和99百分位。...通过加大shared_size的值,可以获得更准确的结果,如图5所示。但这样做使得聚集操作更为昂贵(尤其是在将它们嵌套起来时),因为内存中需要保存更多的桶。 ?

    3.1K30

    MongoDB的聚合操作以及与Python的交互

    聚合是基于数据处理的聚合管道,每个文档通过由多个阶段组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列处理,输出结果。...常用管道 下面介绍常用的管道: $group:将集合中的文档分组,可用于统计结果 $match:过滤数据,只输出符合条件的文档 $project:修改输入文档的结构,如重命名、增加、删除字段,也可用于创建计算结果以及嵌套文档...$sort:将输入文档排序后输出 $limit:限制聚合管道返回的文档数 $skip:跳过指定数量的文档,并返回余下的数据 $unwind:将数组类型的字段进行拆分 常用聚合表达式 下面介绍常用的聚合表达式...: sum:计算总和,sum:1表示以1计数 $avg:计算平均值 $min:获取最小值 $max:获取最大值 $push:在结果文档中插入值到一个数组中 $first:根据资源文档的排序,获取第一个文档数据...:1}, avg_score:{$avg:"$score"} }}) 输出结果为: 以性别进行分组,获取不同分组中数据的个数和平均分数 db.students.aggregate

    5.3K20

    MySQL学习9_DQL之聚合与分组

    :输出排序顺序 常见的聚合函数 AVG():平均值,自动忽略值为NULL的行 COUNT():行数 count(*):统计所有行,包含空行 count(column):对特定列column中具有值的行进行计数...SUM():总和 可以用于合计计算 自动忽略空行 栗子 聚合函数使用的格式为 select AVG/MIN/MAX(字段名) as other_name from table_name -- as...(prod_price) as avg_price from Products where vend_id = 'DLL01'; 分组 使用分组可以将数据多个逻辑组,对每个组进行聚集计算。...Products group by vend_id; -- 指定分组的字段:对每个vend_id进行计算 规定: group by中可以包含任意数目的列,可以进行嵌套 group by子句中列出的每一列都是检索列或者有效的表达式...二者区别: where过滤的是行,在数据分组之前进行过滤 having过滤的是分组,在数组分组之后进行过滤 select cust_id, count(*) as orders from Orders

    1.7K10

    白话Elasticsearch34-深入聚合数据分析之案例实战bucket嵌套实现颜色+品牌的多层下钻分析

    对颜色进行bucket操作以后,再计算每种颜色的平均价格的metrics操作。...假设 又来了个新需求: 从颜色到品牌进行下钻分析,每种颜色的平均价格,以及找到每种颜色每个品牌的平均价格 那就需要进行多层次的下钻分析了 举个例子:比如说,我们现在的索引中红色的电视有4台,同时这4台电视中...,有3台是属于长虹的,1台是属于小米的 那如何计算出 : 红色电视中的3台长虹的平均价格是多少?...---- Step3.对每种颜色进行bucket分组 , 然后对每个分组再次计算平均价格 , 紧接再对每种颜色按照brand分组,直接写到和 color_avg_price 并列的地方就可以了 GET...} ] } } ] } } } ---- Step4.对每种颜色进行bucket分组 , 然后对每个分组再次计算平均价格

    35930

    Elasticsearch使用:嵌套对象

    ] } } } 正如我们在 对象数组 中讨论的一样,出现上面这种问题的原因是 JSON 格式的文档被处理成如下的扁平式键值对的结构。...可以通过设置 score_mode 参数来控制这个得分策略,相关策略有 avg (平均值), max (最大值), sum (加和) 和 none (直接返回 1.0 常数值分数)。...然而,通过 reverse_nested 聚合,我们可以 走出 嵌套层级,回到父级文档进行操作。 例如,我们要基于评论者的年龄找出评论者感兴趣 tags 的分布。..."aggs": { "tags": { "terms": { # terms 聚合计算每个分组年龄段的评论者最常用的标签词。...可以通过设置 score_mode 参数来控制这个得分策略,相关策略有 avg(平均值),max(最大值),sum(加和) 和 none(直接返回 1.0 常数值分数)。

    6.3K81

    云数据库进阶1:聚合操作

    ,可以用点表示法表示一个嵌套字段 includeLocs string 否 列出要用于距离计算的字段,如果记录中有多个字段都是地理位置时有用 key string 否 选择要用的地理位置索引。...将输入记录按给定表达式分组,输出时每个记录代表一个分组,每个记录的 _id 是区分不同组的 key。输出记录中也可以包括累计值,将输出字段设为累计值即会从该分组中计算累计值。...累计器必须是以下操作符之一: 操作符 说明 addToSet 向数组中添加值,如果数组中已存在该值,不执行任何操作 avg 返回一组集合中,指定字段对应数据的平均值 sum 计算并且返回一组字段所有数值的总和..." ] } 如何统计文章的标签信息,并且计算每个标签的数量?...我们根据 size 字段对记录进行拆分后,想要保留原数组索引在新的 index 字段中。

    4.5K41

    mongodb11天之屠龙宝刀(八)聚合函数与管道:sql与mongodb聚合函数对比

    5、$push 把文档中某一列对应的所有数据插入值到一个数组中。   ...这里我们介绍一下聚合框架中常用的几个操作: project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。match:用于过滤数据,只输出符合条件的文档。...match:用于过滤数据,只输出符合条件的文档。match使用MongoDB的标准查询操作。project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。...可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。 match:用于过滤数据,只输出符合条件的文档。match:用于过滤数据,只输出符合条件的文档。...unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。 group:将集合中的文档分组,可用于统计结果。group:将集合中的文档分组,可用于统计结果。

    1.7K10

    mongodb11天之屠龙宝刀(八)聚合函数与管道:sql与mongodb聚合函数对比

    5、$push 把文档中某一列对应的所有数据插入值到一个数组中。   ...这里我们介绍一下聚合框架中常用的几个操作: project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。match:用于过滤数据,只输出符合条件的文档。...match:用于过滤数据,只输出符合条件的文档。match使用MongoDB的标准查询操作。project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。...可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。 match:用于过滤数据,只输出符合条件的文档。match:用于过滤数据,只输出符合条件的文档。...unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。 group:将集合中的文档分组,可用于统计结果。group:将集合中的文档分组,可用于统计结果。

    1.8K50
    领券