學習PG聚合操作機制時,看到ExecInitAgg中初始化時有對AggState中有pergroups等進行初始化[AggState的解釋見上一篇:GreenPlum7聚合操作結構體之間關系
那么什么是pergroups呢,它的作用是什么?
ExecInitAgg中:可以看到組數等于組集合數(若沒hash的話),每個分組中有numaggs個聚集

這里就需要理解什么是grouping sets。
PostgreSQL9.5版本引入了group by的分組集合功能,提供了GROUPING SETS,CUBE,ROLLUP參數。這些新的標準SQL選項可以讓用戶在一次查詢中生成多個不同級別或者多維度的報表,而不是像以前一樣需要幾次查詢。
postgres=# create table t1(id1 int,name varchar(20),class int,score int);
CREATE TABLE
postgres=# select * from t1; id1 | name | class | score
-----+----------+-------+-------
1 | math | 1 | 50
2 | math | 2 | 90
3 | math | 1 | 70
5 | chinese | 1 | 50
6 | chinese | 2 | 60
4 | chinese | 2 | 60
7 | physical | 1 | 90
8 | physical | 2 | 80
(8 行記錄)
首先看下普通的group by:根據name和class字段求和:

可以看到到僅一個聚合分類。那么再看下GROUPING SETS語法:

有3種聚合分類:1)針對name進行分組然后求sum值;2)針對class進行分組,然后求sum值;3)grouping sets種的空,表示所有行都聚合到一個分組中。
需要注意,grouping sets的集合中,一個括號一個分組,如下(name,class)為一個分組。該語句等價于普通的group by。

總結:grouping sets中有一個集合,則有一個聚合;若有2個集合,則2個聚合。
-
SQL
+關注
關注
1文章
789瀏覽量
46701
發布評論請先 登錄
接地電阻測試儀作用是什么?主要由什么組成?
CW32R031C8U6 集成balun,請問一下,這個balun是啥?其作用是什么?
rt_mq_recv函數中timeout作用是什么?
高壓放大器的作用是什么呢
超高電壓放大器的作用是什么
請問EZ-PD? PMG1-S3 PD SBU MUX中SBU線上的比較器的作用是什么?
安泰高功率放大器作用是什么意思
什么是pergroups呢,它的作用是什么?
評論