一张图让你详细理解Group By的分组聚合过程
2016-10-29 12:10
274 查看
原文链接:http://www.datastudy.cc/to/58
Group By分组聚合是我们在使用过程中使用最多的SQL之一(另外一个使用最多的估计就是JOIN了吧),为了让大家详细了解Group By的计算执行过程,我们下面使用一张图来详细讲解一下。
我们的数据就是左表,有name和score两列,我们要求每个name下,score的最大值,技术术语是:根据每个name进行分组,根据max函数进行聚合(我们和别人交流的时候,记得要这样子说)。
Group by语句先会根据每个name进行分组,把每个name对应的score都放到一个地方,如中间的表格所示。例如,name为b的行,有三个对应的score,其他类推,每个数据库都会做好这一步的准备,也就是Group By操作执行之后,这个中间的数据体就会存在了,它等待着我们调用聚合函数去统计它。
然后,我们的聚合函数要调用的是:max,也就是从一堆数据中,取出最大值的函数。聚合函数还有其他值,例如和最大值max对应的最小值min,求和sum等等,所有这些聚合函数,都是针对一个数组进行处理的,所谓的数据,就是b里面那三个值。
yes,有了中间那个数据体,我们就可以非常简单地理解所谓的聚合函数了。OK,聚合函数执行完成后,把返回的值交给分组的字段,组合成一行记录,数据库等待所有的分组都执行完成,把数据组合起来,返回给我们。
这个就是整个分组聚合的过程,如果你觉得还是不能理解,那么在本文下面回复吧。
Group By分组聚合是我们在使用过程中使用最多的SQL之一(另外一个使用最多的估计就是JOIN了吧),为了让大家详细了解Group By的计算执行过程,我们下面使用一张图来详细讲解一下。
我们的数据就是左表,有name和score两列,我们要求每个name下,score的最大值,技术术语是:根据每个name进行分组,根据max函数进行聚合(我们和别人交流的时候,记得要这样子说)。
Group by语句先会根据每个name进行分组,把每个name对应的score都放到一个地方,如中间的表格所示。例如,name为b的行,有三个对应的score,其他类推,每个数据库都会做好这一步的准备,也就是Group By操作执行之后,这个中间的数据体就会存在了,它等待着我们调用聚合函数去统计它。
然后,我们的聚合函数要调用的是:max,也就是从一堆数据中,取出最大值的函数。聚合函数还有其他值,例如和最大值max对应的最小值min,求和sum等等,所有这些聚合函数,都是针对一个数组进行处理的,所谓的数据,就是b里面那三个值。
yes,有了中间那个数据体,我们就可以非常简单地理解所谓的聚合函数了。OK,聚合函数执行完成后,把返回的值交给分组的字段,组合成一行记录,数据库等待所有的分组都执行完成,把数据组合起来,返回给我们。
这个就是整个分组聚合的过程,如果你觉得还是不能理解,那么在本文下面回复吧。
相关文章推荐
- 一张图让你详细理解Group By的分组聚合过程
- JAVA编码转换的详细过程理解—>浏览器和服务器的接收和发送数据的编码
- sha1哈希算法 分组过程以及算法路程详细
- elasticsearch聚合操作——本质就是针对搜索后的结果使用桶bucket(允许嵌套)进行group by,统计下分组结果,包括min/max/avg
- 深入理解Fabric环境搭建的详细过程(转)
- 深入理解Fabric环境搭建的详细过程
- 有关端口链路聚合问题(详细,容易理解)
- elasticsearch核心知识--30.分页搜索以及deep paging性能问题深度理解和es中聚合aggregation的分组可能结果不准确的原因
- Sequelize中用group by进行分组聚合查询
- 深入理解Fabric环境搭建的详细过程
- 一个http请求的详细过程---理解计算机网络
- 组合游戏--一步一步详细分析理解推导过程
- JAVA编码转换的详细过程理解—>浏览器和服务器的接收和发送数据的编码
- Sequelize中用group by进行分组聚合查询
- 一张图带你理解事件分发过程
- 【清楚理解后台利用ireport到处报表的原理】ireport制作jasperreport报表详细过程(包括jsp端代码实现)
- JAVA编码转换的详细过程理解—>浏览器和服务器的接收和发送数据的编码
- 读书笔记_深入理解计算机系统_第1章_计算机系统漫游 (代码编译链接详细过程)
- oracle 分组函数与group by正确用法详解与详细解释
- 深入理解Fabric环境搭建的详细过程