身安不如心安,屋宽不如心宽 。

关于elasticsearch二次聚合的问题

Elasticsearch | 作者 xuziqi | 发布于2019年07月09日 | 阅读数:3741

关于elasticsearch二次聚合的问题
现在我们有一张消费明细表(一个人有多条消费记录)
首先我们想计算出一个人的总消费金额
然后我们想得到总消费大于500美金的所有人数
那么我们需要在计算出一个人总消费金额的基础上进行二次聚合

比如sql的实现就是:
select count(1)
from (select *
from (select mobile_nbr, sum(trans_amt) total_trans_amt
from activity_detail
group by mobile_nbr) t
where t.total_trans_amt > 500) tt

请问一下,es支持这种查询么~
已邀请:

fantuan

赞同来自:

mobile_nbr 做terms agg, 内嵌sum agg获得个人总消费金额。
bucket selector选出大于500美金的人数
 
https://www.elastic.co/guide/e ... .html
 

bellengao - 博客: https://www.jianshu.com/u/e0088e3e2127

赞同来自:

{
  "aggs": {
    "one": {
      "terms": {
        "field": "mobile_nbr"
      },
      "aggs": {
        "x": {
          "sum": {
            "field": "trans_amt"
          }
        },
        "sum_bucket_filter": {
          "bucket_selector": {
            "buckets_path": {
              "totalSum": "x"
            },
            "script": "params.totalSum > 500"
          }
        }
      }
    },
    "stats_buckets": {
            "stats_bucket": {
                "buckets_path": "one.x" 
            }
        }
    
  }
}

要回复问题请先登录注册