第21课:聚集与分组的执行说明

PostgreSQL 中除了 SPJ(SELECT、PROJECT、JOIN) 之外,还有大量的聚合和分组操作,比如下面示例中的语句,其中有聚集操作 avg(a) 和分组操作 GROUP BY b。顾名思义,聚集操作就是一个合并的过程,而分组操作则是对数据的归类。

postgres=# EXPLAIN SELECT avg(a) FROM TEST_A GROUP BY b;
                          QUERY PLAN
--------------------------------------------------------------
 HashAggregate  (cost=2.50..3.75 rows=100 width=36)
   Group Key: b
   ->  Seq Scan on test_a  (cost=0.00..2.00 rows=100 width=8)
(3 rows)

简单的聚集操作

简单来说,聚集操作分成 3 个步骤。

  • 初始阶段:初始化一个初值,比如对于 avg 操作来说,它的初值是 0。
  • 中间阶段:向初值中不断累加值,并记载累加了多少条记录。比如要对 TEST_A.a 做 avg 聚集操作,就需要先把 TEST_A.a 中的所有列值累加起来,并且同时统计 TEST_A.a 中有多少条数据。
  • 结束阶段:对累加的数据做最后的处理,比如对 avg 聚集来说,在中间阶段已经累加了所有的值和数量,求平均值就只需要做一次除法就可以了。

这样看起来还是蛮容易的,如果我们自己去算一个平均数,也都是这样做的。但是 avg 是函数的形态,PostgreSQL

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值