elasticsearch 聚合查询

前言

  如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
  而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!


elasticsearch 聚合查询

以下是一些聚合查询可以执行的操作:
1. 桶聚合(Bucket Aggregations):将文档分割成不同的桶(buckets),每个桶代表一个条件或者标准。常见的桶聚合包括根据词条、范围、日期等条件进行分桶。
2. 度量聚合(Metric Aggregations):对文档中的数值字段进行计算,生成统计指标,如平均值、总和、最大值、最小值等。
3. 嵌套聚合(Nested Aggregations):在其他聚合的结果上进行嵌套,以实现更复杂的分析。
4. 指标聚合(Matrix Aggregations):对多个字段执行度量聚合,以生成多维度的统计信息。

1. 桶聚合

将文档分割成不同的桶(buckets),每个桶代表一个条件或者标准。常见的桶聚合包括根据词条、范围、日期等条件进行分桶。
根据日期进行分桶:

GET /sales/_search
{
  "query": {
    "match_all": {}
  },
  "aggs": {
    "genres": {
      "terms": {
        "field": "publish_date"
      }
    }
  }
}

在这里插入图片描述

2. 度量聚合

假设您有一个名为 sales 的索引,其中包含销售数据,包括 price(价格)字段。现在,您想要计算销售总额和销售平均价格。
示例:

GET /sales/_search
{
  "aggs": {
    "total_sales": {
      "sum": {
        "field": "price"
      }
    },
    "avg_price": {
      "avg": {
        "field": "price"
      }
    }
  }
}

在这里插入图片描述
这个查询包含了两个度量聚合:

  1. total_sales: 使用 sum 聚合计算销售总额,通过将 price 字段的值相加得出。
  2. avg_price: 使用 avg 聚合计算销售平均价格,通过取 price 字段的平均值得出。
    执行这个查询将返回计算得出的销售总额和销售平均价格。

3. 嵌套聚合

上面的例子是返回计算得出的销售总额和销售平均价格。
那么这回我们就查询聚合每个日期的销售总额和平均价格

当需要使用嵌套查询时,您通常会在主查询中嵌套一个或多个子查询,以便根据子查询的结果来过滤或进一步处理主查询的结果。

GET /sales/_search
{
  "size": 0,
  "aggs": {
    "自定义": {
      "terms": {
        "field": "publish_date"
      },
      "aggs": {
        "total_sales": {
          "sum": {
            "field": "price"
          }
        },
        "avg_price": {
          "avg": {
            "field": "price"
          }
        }
      }
    }
  }
}

在这里插入图片描述

4. 指标聚合

指标聚合查询是用于计算度量指标的查询,这些指标可以是总数、平均值、最大值、最小值等统计量。在 Elasticsearch 中,指标聚合允许您对字段进行聚合计算,以便了解数据集的特征和趋势。
以下是一些常见的指标聚合类型:

  1. Sum Aggregation(求和聚合):计算特定字段的总和。
  2. Avg Aggregation(平均值聚合):计算特定字段的平均值。
  3. Min Aggregation(最小值聚合):找出特定字段的最小值。
  4. Max Aggregation(最大值聚合):找出特定字段的最大值。
  5. Stats Aggregation(统计值聚合):提供特定字段的统计信息,如总数、平均值、最小值、最大值等。
  6. Extended Stats Aggregation(扩展统计聚合):与统计值聚合类似,但还提供了额外的信息,如方差、标准差等。
### 聚合查询的定义与用法 #### 1. 聚合查询的定义 聚合查询是指在数据库查询中,使用聚合函数对一组数据进行统计计算的查询操作。常见的聚合函数包括 `SUM()`、`AVG()`、`COUNT()`、`MAX()` 和 `MIN()` 等[^3]。这些函数可以对某一列的数据进行求和、平均值计算、计数、最大值和最小值等操作。 #### 2. 聚合查询的基本语法 聚合查询通常结合 `GROUP BY` 子句使用,以对数据进行分组并计算每个组的聚合结果。其基本语法如下: ```sql SELECT 列名, 聚合函数(列名) FROM 表名 WHERE 条件 GROUP BY 列名 HAVING 分组条件 ORDER BY 排序条件; ``` - `SELECT` 子句用于指定需要查询的列以及聚合函数。 - `FROM` 子句指定查询的数据表。 - `WHERE` 子句用于过滤行数据[^3]。 - `GROUP BY` 子句用于将数据按指定列分组[^3]。 - `HAVING` 子句用于过滤分组后的结果。 - `ORDER BY` 子句用于对结果进行排序[^3]。 #### 3. 示例代码 以下是一个使用聚合查询的示例,假设有一个名为 `grades` 的表,包含学生学号 `sno`、课程号 `cno` 和成绩 `grade` 三列。 ```sql -- 查询每门课程的最高分 SELECT cno, MAX(grade) AS max_grade FROM grades GROUP BY cno; -- 查询选修了超过5门课程的学生及其选课数量 SELECT sno, COUNT(cno) AS course_count FROM grades GROUP BY sno HAVING COUNT(cno) > 5; ``` #### 4. 聚合查询的使用方法 - **单个聚合函数**:可以直接使用一个聚合函数对整个表或满足条件的部分数据进行计算。例如,计算所有学生的平均成绩: ```sql SELECT AVG(grade) AS avg_grade FROM grades; ``` - **多个聚合函数**:可以在同一个查询中使用多个聚合函数。例如,同时计算所有学生的总成绩和平均成绩: ```sql SELECT SUM(grade) AS total_grade, AVG(grade) AS avg_grade FROM grades; ``` - **结合 GROUP BY**:通过 `GROUP BY` 对数据进行分组,并为每个组计算聚合结果。例如,计算每个系的学生人数: ```sql SELECT sdept, COUNT(*) AS student_count FROM students GROUP BY sdept; ``` #### 5. 注意事项 - 在使用 `GROUP BY` 时,`SELECT` 子句中除了聚合函数外,只能包含出现在 `GROUP BY` 子句中的列[^3]。 - 如果需要对分组后的结果进一步过滤,可以使用 `HAVING` 子句,而不是 `WHERE` 子句[^3]。 --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

栗子~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值