Elastic Stack--15--聚合查询(SUM、MAX、MIN、AVG)案例

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • ES的聚合查询(SUM、MAX、MIN、AVG)
    • 1.求和查询
    • 2.求平均值
    • 3.最大最小值查询
    • 4.唯一值查询 (类似于sql中的==distinct 去重==)
    • 5.stats聚合


ES的聚合查询(SUM、MAX、MIN、AVG)

1.求和查询

  • 例如查询cust_name_s为张三的txn_amt_d的和,sql语句是
select sum(txn_amt_d) as sum_number from trade_info.csrcb where cust_name_s = '张三'

对应的es的查询就是(此处与sql中的sum一样,也有起别名以及聚合方式的参数,其中的aggs可以写全,写成aggregatins)

curl -XPOST "http://192.168.236.131:9200/trade_info/csrcb/_search" -H "Content-Type:application/json" -d '{
    "query": {
        "term": {
            "cust_name_s.keyword": "张三"
        }
    },
    "aggs": {
        "sum_number": {
            "sum": {
                "field": "txn_amt_d"
            }
        }
    }
} '

在这里插入图片描述

2.求平均值

  • 例如查询cust_name_s为张三的txn_amt_d的平均值
select avg(txn_amt_d) as avg_number from trade_info.csrcb where cust_name_s = '张三'

同样在es的查询中只要指定聚合方式为avg即可

curl -XPOST "http://192.168.236.131:9200/trade_info/csrcb/_search" -H "Content-Type:application/json" -d '{
    "query": {
        "term": {
            "cust_name_s.keyword": "张三"
        }
    },
    "aggregations": {
        "avg_number": {
            "avg": {
                "field": "txn_amt_d"
            }
        }
    }
} '

在这里插入图片描述

3.最大最小值查询

  • 查询cust_name_s为张三的txn_amt_d的最大值和最小值,sql语句是
select max(txn_amt_d) as max_number, min(txn_amt_d) as min_number 
from trade_info.csrcb where cust_name_s = '张三'

同样只要指定最大最小的别名,并且指定聚合方式为max以及min即可

curl -XPOST "http://192.168.236.131:9200/trade_info/csrcb/_search" -H "Content-Type:application/json" -d '{
    "query": {
        "term": {
            "cust_name_s.keyword": "张三"
        }
    },
    "aggregations": {
        "max_number": {
            "max": {
                "field": "txn_amt_d"
            }
        },
        "min_number": {
            "min": {
                "field": "txn_amt_d"
            }
        }
    }
} '

在这里插入图片描述

4.唯一值查询 (类似于sql中的distinct 去重)

  • 使用cardinality求唯一值,即不重复的字段有多少,同样,统计的字段不能分词,例如统计cust_name_s字段的不重复的值
    在这里插入图片描述
curl -XPOST "http://192.168.236.131:9200/trade_info/csrcb/_search" -H "Content-Type:application/json" -d '{
    "size": 0,
    "query": {
        "match_all": {}
    },
    "aggregations": {
        "unique_num": {
            "cardinality": {
                "field": "cust_name_s.keyword"
            }
        }
    }
} '

在这里插入图片描述

5.stats聚合

使用stats聚合,可以将满足条件的记录直接统计最大最小、平均值、总和、记录数结果

  • 例如查询cust_name_s为张三的统计,统计的字段为txn_amt_d
curl -XPOST "http://192.168.236.131:9200/trade_info/csrcb/_search?pretty" -H "Content-Type:application/json" -d '{
    "size": 0,
    "query": {
        "term": {"cust_name_s.keyword": "张三"}
    },
    "aggregations": {
        "count_nums": {
            "stats": {
                "field": "txn_amt_d"
            }
        }
    }
} '

在这里插入图片描述

上一篇:单例模式之静态内部类与枚举类


下一篇:windows10 +VS2019环境下的PCL安装和配置