本节 es 笔记目录如下:

  1. 分组计数
  2. 平均数 avg
  3. 最大值 max
  4. 最小值 min
  5. 总和 sum

此次笔记用到的数据还是前一节中导入的官方提供的bank数据,用到其他数据的,下面会提供导入方式。

首先,来看一下我们导入的数据的各个字段,使用下面命令获取(命令都在 kibana 中使用):

"_source" : 

1、分组计数

我们对数据中state字段进行分组计数,计算数据中每个state种类出现的次数:

GET /bank/_search
{"size": 0,"aggs": {"group_by_state": {"terms": {"field": "state.keyword"}}}
}

其中,group_by_state是分组的名称,用来标识分组的名称,

terms则是用来分组的关键字,

state.keyword表示取值是state这个字段。

运行之后返回,可以看到返回结果按照state的值,作为key,以及doc_count作为count的数值结果返回。

对应于 MySQL 中的语法大致是:

SELECT 

限定分组返回的数据结果:

使用到上一节笔记中的fromsize

在上面的语法中在aggssize字段,是用来限定返回结果中的源数据的条数,赋值为 0 表示不返回源数据。

而要限制分类结果的size(默认十条),则是在terms下一级,与field同级。

{

2、平均数 avg

我们想知道bank这个 index 下的所有数据中age字段的平均值,也就是所有人的平均年龄,语法如下:

GET /bank/_search
{"size": 0,"aggs": {"average_of_age": {"avg": {"field": "age"}}}
}

主体返回结果如下:

  "aggregations" : {"average_of_age" : {"value" : 30.171}}

average_of_agevalue值就是我们要的 年龄平均值了。

这个语法在 MySQL 中对应如下:

SELECT 

missing 值的使用:

在 es 里面,还有个missing关键字,这个字是干啥的呢?

当我们不能保证所有的数据都是完整的,尤其是涉及到查询的字段,就需要用到missing这个词。

作用是缺失值替代,也就是加了这个关键字,并且带上参数以后,在查询计算中如果查询的字段值缺失,那么就会默认使用到 missing 这个词。

bank 的数据太多了,我们可以手动创建几条数据测试:

PUT /exam/_doc/1
{"name" : "hunter","grade": 60
}
PUT /exam/_doc/2
{"name" : "paul","grade": 80
}
PUT /exam/_doc/3
{"name" : "jack","grade": 90
}
PUT /exam/_doc/4
{"name" : "tom",
}

可以通过如下语句看一下这几条数据:

GET /exam/_search
{"query": {"match_all": {}}
}

可以看到,最后一条数据是没有 grade 这个字段的,

当我们直接求取平均值:

GET /exam/_search
{"size": 0,"aggs": {"avg_of_grade": {"avg": {"field": "grade"}}}
}

可以看到返回结果:

  "aggregations" : {"avg_of_grade" : {"value" : 76.66666666666667}}

可以得出这个结果是只获取了有 grade 字段的三条数据,然后进行平均值计算。

当我们加上 missing 关键字:

GET /exam/_search
{"size": 0,"aggs": {"avg_of_grade": {"avg": {"field": "grade","missing": 60}}}
}

返回结果如下:

可以知道虽然第四条没有 grade 的数据,但是通过 missing 指定默认值,得出了计算结果。

以上就是 missing 的用法。

3、最大值 max

max 的用法和 avg 的使用方法一样,语法如下:

{

返回结果:

 "aggregations" : {"max_age" : {"value" : 40.0}}

使用 script 方法计算数据:

我们还可以使用 script 的方式来得出计算结果:

GET /bank/_search
{"size": 0,"aggs":{"max_age": {"max": {"script": {"source": "doc.age.value"}}}}
}

还有一种对返回的结果进行计算的脚本方式:

GET /bank/_search
{"size": 0,"aggs":{"max_age": {"max": {"field": "age","script": {"source": "_value * params.conversion_rate","params": {"conversion_rate": 1.2}}}}}
}

4、最小值 min

最小值的计算方法和最大值相同,关键字 max 改成 min即可,如下是示例:

GET /bank/_search
{"size": 0,"aggs": {"min_age": {"min": {"field": "age"}}}
}

如上语法对应 MySQL 中的是:

SELECT 

5、计算总和 sum

目标:计算数据中 age 的总和

{

对应于 MySQL 中的语法是:

SELECT 

如果要加上筛选条件,比如 state 的值为 TX 的数据的 age 的总和:

{

对应于 MySQL 中的语法是:

SELECT SUM(age) FROM table_name WHERE age='TX';

PS:此文本人首发于CSDN博客,地址:elasticsearch 笔记三 之聚合查询之分组计数、平均数、missing值使用、最大值、使用script计算、最小值、总和

elasticsearch aggregations_elasticsearch 笔记三 之聚合查询之分组计数、平均数、最大值、script、最小值、总和...相关推荐

  1. elasticsearch 笔记三 之聚合查询之分组计数、平均数、missing值使用、最大值、使用script计算、最小值、总和

    本节 es 笔记目录如下: 分组计数 平均数 avg 最大值 max 最小值 min 总和 sum 此次笔记用到的数据还是前一节中导入的官方提供的 bank 数据,用到其他数据的,下面会提供导入方式. ...

  2. elasticsearch 条件去重_elasticsearch 笔记四 之聚合查询之去重计数、基础统计、百分位、字符串统计...

    这一节笔记还是聚合查询,以下是本节目录:去重统计 cardinality 基础统计 stats 百分位 percentiles 字符串统计 string_stats 1.去重统计 cardinalit ...

  3. 第三章 模糊查询与分组查询 ② 代码

    第三章 模糊查询与分组查询 ② 代码 参考代码: 1.增删改语句 0715 [classinfo/student] 2.去重查询/带条件修改/条件删除 [category/goods] 3.案例演练 ...

  4. Web框架之Django_05 模型层了解(单表查询、多表查询、聚合查询、分组查询)

    阅读目录 一.Django ORM 常用字段和参数: 二.单表查询 三.多表查询 基于双下划线的多表查询 四.聚合查询和分组查询 摘要: 单表查询 多表查询 聚合查询 分组查询 一.Django OR ...

  5. Django 【第六篇】ORM跨表操作(聚合查询,分组查询,F和Q查询等)

    一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);     一本书只应该由一个出版商出 ...

  6. day08 外键字段的增删改查 正向反向插叙概念 跨表查询 聚合查询与分组查询 F查询

    day08 外键字段的增删改查 正向反向插叙概念 跨表查询 聚合查询与分组查询 F查询 昨日内容复习 自定义过滤器.标签.inclusion_tag 1.首先现在应用目录下创建名字为templatet ...

  7. SQL语句汇总(三)——聚合函数、分组、子查询及组合查询

    聚合函数: SQL中提供的聚合函数可以用来统计.求和.求最值等等. 分类: –COUNT:统计行数量 –SUM:获取单个列的合计值 –AVG:计算某个列的平均值 –MAX:计算列的最大值 –MIN:计 ...

  8. django orm关联查询_Django ORM 聚合查询和分组查询实现详解

    models.py: from django.db import models # 出版社 class Publisher(models.Model): id = models.AutoField(p ...

  9. Day51python Django 多表操作 聚合查询、分组查询、F查询、Q查询

    1聚合查询aggregate aggregate()是QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典,可以自己制定键. 1.# 计算所有图书的平均价格 books = mo ...

最新文章

  1. Java程序执行过程
  2. spring logback mysql_logback 日志输出格式
  3. .net2.0 orm_Java 8:深入研究速度3.0.1“森林”流ORM
  4. Django多域名配置之Django-hosts插件的使用
  5. vue = 什么意思_Vue导入模块import xxx from '@/xxx'中的@是什么含义?
  6. 2021-08-21
  7. django小站,数据3w+
  8. sublime能编译PHP吗,让sublime编译php、js
  9. 695.岛屿的最大面积(力扣leetcode) 博主可答疑该问题
  10. keil+flymcu+CubeMX开发STM32F407
  11. MFC Windows程序设计源代码免费下载
  12. oracle建表语句 货币,Oracle建表语句是什么
  13. 为什么显示连接服务器超时,连接服务器超时什么意思
  14. python电影数据分析报告_Python进行电影数据分析及可视化
  15. 使用逐步细化开发 DFD
  16. 用matlab绘制三维图和三视图
  17. 做一个最简单的上位机
  18. Oracle Dimension in DWH
  19. 名帖84 米芾 小楷《九歌》
  20. 批量录入快递地址解决方案

热门文章

  1. 【转】5G EN-DC/NE-DC/NGEN-DC构架
  2. linux内核驱动之 用户空间和内核空间
  3. C语言控制台窗口界面编程:用printf在终端打印一个GUI窗口
  4. 人工智能行业有哪些岗位_电力人有哪些岗位将被人工智能取代?
  5. canvas中文显示乱码 html5_40个常见的HTML5 面试问题及答案
  6. Django主从数据库分离配置
  7. netty的handler里面ctx.channel().writeAndFlush()和ctx.writeAndFlush()的区别
  8. Linux下DMA添加两个channel,基于Linux嵌入式系统的ISA总线DMA的实现
  9. JAVA学习-数组元素排序
  10. OpenShift 4 - 查看关键证书到期日期