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

如何通过数组中嵌套的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.5K10

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

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

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

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

    34010

    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": 这是嵌套聚合类型,表示计算平均值。

    70790

    一起学Elasticsearch系列-聚合查询

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

    53720

    ElasticsearchR在这里,查询与聚合

    _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子句进行排序操作

    42430

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

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

    39510

    学好Elasticsearch系列-聚合查询

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

    44720

    MongoDB高级操作(管道聚合)

    一、 聚合aggregate 聚合(aggerate)主要用于计算数据,类似于SQLsum(),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.2K11

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

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

    7.4K30

    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.2K20

    触类旁通Elasticsearch:聚合

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

    3.1K30

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

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

    35230

    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

    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.1K81

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

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

    4.4K41

    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
    领券