热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

白话Elasticsearch38深入聚合数据分析之案例实战下钻分析之统计每季度每个品牌的销售额

文章目录概述案例Step1.先按照季度进行bucket分组Step2.然后对每个季度bucket中,下钻,按照品牌继续分组,对每个品牌求销售额Step3


文章目录

  • 概述
  • 案例
    • Step1. 先按照季度进行bucket分组
    • Step2.然后对每个季度bucket中,下钻 ,按照品牌继续分组,对每个品牌求销售额
    • Step3. 其实也还可以计算每个季度所有品牌的 总销售额




在这里插入图片描述




概述

继续跟中华石杉老师学习ES,第38篇

课程地址: https://www.roncoo.com/view/55




案例

需求: 统计每季度每个品牌的销售额

原始数据:
在这里插入图片描述




Step1. 先按照季度进行bucket分组

首先按照季度 bucket分组 ,使用 date_histogram , 季度interval->quarter

GET /tvs/sales/_search
{"size": 0,"aggs": {"group_by_sold_date": {"date_histogram": {"field": "sold_date","interval": "quarter","min_doc_count": 0,"format": "yyyy-MM-dd","extended_bounds": {"min": "2016-04-01","max": "2017-03-31"}}}}
}

返回:

在这里插入图片描述




Step2.然后对每个季度bucket中,下钻 ,按照品牌继续分组,对每个品牌求销售额

GET /tvs/sales/_search
{"size": 0,"aggs": {"group_by_sold_date": {"date_histogram": {"field": "sold_date","interval": "quarter","min_doc_count": 0,"format": "yyyy-MM-dd","extended_bounds": {"min": "2016-04-01","max": "2017-03-31"}},"aggs": {"group_by_brand": {"terms": {"field": "brand"},"aggs": {"brand_sum_price": {"sum": {"field": "price"}}}}}}}
}

返回:

{"took": 9,"timed_out": false,"_shards": {"total": 5,"successful": 5,"skipped": 0,"failed": 0},"hits": {"total": 8,"max_score": 0,"hits": []},"aggregations": {"group_by_sold_date": {"buckets": [{"key_as_string": "2016-04-01","key": 1459468800000,"doc_count": 1,"group_by_brand": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [{"key": "小米","doc_count": 1,"brand_sum_price": {"value": 3000}}]}},{"key_as_string": "2016-07-01","key": 1467331200000,"doc_count": 2,"group_by_brand": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [{"key": "TCL","doc_count": 2,"brand_sum_price": {"value": 2700}}]}},{"key_as_string": "2016-10-01","key": 1475280000000,"doc_count": 3,"group_by_brand": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [{"key": "长虹","doc_count": 3,"brand_sum_price": {"value": 5000}}]}},{"key_as_string": "2017-01-01","key": 1483228800000,"doc_count": 2,"group_by_brand": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [{"key": "三星","doc_count": 1,"brand_sum_price": {"value": 8000}},{"key": "小米","doc_count": 1,"brand_sum_price": {"value": 2500}}]}}]}}
}

找个季度来验证下结果

原始数据:
在这里插入图片描述

计算结果中的一部分:
在这里插入图片描述




Step3. 其实也还可以计算每个季度所有品牌的 总销售额

GET /tvs/sales/_search
{"size": 0,"aggs": {"group_by_sold_date": {"date_histogram": {"field": "sold_date","interval": "quarter","min_doc_count": 0,"format": "yyyy-MM-dd","extended_bounds": {"min": "2016-04-01","max": "2017-03-31"}},"aggs": {"group_by_brand": {"terms": {"field": "brand"},"aggs": {"brand_sum_price": {"sum": {"field": "price"}}}},"total_sum_price": {"sum": {"field": "price"}}}}}
}

返回:

GET /tvs/sales/_search
{"size": 0,"aggs": {"group_by_sold_date": {"date_histogram": {"field": "sold_date","interval": "quarter","min_doc_count": 0,"format": "yyyy-MM-dd","extended_bounds": {"min": "2016-04-01","max": "2017-03-31"}},"aggs": {"group_by_brand": {"terms": {"field": "brand"},"aggs": {"brand_sum_price": {"sum": {"field": "price"}}}},"total_sum_price": {"sum": {"field": "price"}}}}}
}

继续用2017第一季度来验证下
在这里插入图片描述


推荐阅读
  • iOS 小组件开发指南
    本文详细介绍了iOS小部件(Widget)的开发流程,从环境搭建、证书配置到业务逻辑实现,提供了一系列实用的技术指导与代码示例。 ... [详细]
  • 本文详细介绍了如何使用 Python 编程语言中的 Scapy 库执行 DNS 欺骗攻击,包括必要的软件安装、攻击流程及代码示例。 ... [详细]
  • java datarow_DataSet  DataTable DataRow 深入浅出
    本篇文章适合有一定的基础的人去查看,最好学习过一定net编程基础在来查看此文章。1.概念DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据 ... [详细]
  • 行为设计模式:命令模式详解
    命令模式是一种行为设计模式,它通过将请求封装为对象,使得可以使用不同的请求来参数化客户端,支持请求的排队、日志记录以及提供命令的撤销和恢复功能。 ... [详细]
  • 本文详细介绍了Oracle RMAN中的增量备份机制,重点解析了差异增量和累积增量备份的概念及其在不同Oracle版本中的实现。通过对比两种备份方式的特点,帮助读者选择合适的备份策略。 ... [详细]
  • 优雅地记录API调用时长
    本文旨在探讨如何高效且优雅地记录API接口的调用时长,通过实际案例和代码示例,帮助开发者理解并实施这一技术,提高系统的可观测性和调试效率。 ... [详细]
  • 构建Python自助式数据查询系统
    在现代数据密集型环境中,业务团队频繁需要从数据库中提取特定信息。为了提高效率并减少IT部门的工作负担,本文探讨了一种利用Python语言实现的自助数据查询工具的设计与实现。 ... [详细]
  • 详解MyBatis二级缓存的启用与配置
    本文深入探讨了MyBatis二级缓存的启用方法及其配置细节,通过具体的代码实例进行说明,有助于开发者更好地理解和应用这一特性,提升应用程序的性能。 ... [详细]
  • 本文深入探讨了领域驱动设计(DDD)中的聚合概念及其在事件溯源架构中的应用。聚合是一组紧密相关的类,这些类作为一个整体运作,形成一个有明确边界的组织。只有通过聚合根才能与聚合内的对象进行交互。 ... [详细]
  • 本文介绍了如何通过创建自定义 XML 文件来修改 Android 中 Spinner 的项样式,包括颜色和大小的调整。 ... [详细]
  • 本文将详细介绍如何配置并整合MVP架构、Retrofit网络请求库、Dagger2依赖注入框架以及RxAndroid响应式编程库,构建高效、模块化的Android应用。 ... [详细]
  • 本文详细介绍了如何在本地环境中安装配置Frida及其服务器组件,以及如何通过Frida进行基本的应用程序动态分析,包括获取应用版本和加载的类信息。 ... [详细]
  • 本文介绍了一道来自LeetCode的编程题——拼写单词。题目要求从给定的词汇表中找出可以由指定字母表中的字母拼写出的单词,并计算这些单词的总长度。文章将展示如何通过使用数组替代哈希表来提高算法的执行效率。 ... [详细]
  • 本文详细介绍了线性素数筛选法和欧拉线性筛算法,并提供了详细的代码实现及数学证明,帮助读者深入理解这两种高效的算法。 ... [详细]
  • 浅谈Android五大布局——LinearLayout、FrameLayout和AbsoulteLa
    为什么80%的码农都做不了架构师?Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦。 ... [详细]
author-avatar
miss文女1977
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有