學(xué)習(xí)PG聚合操作機(jī)制時(shí),看到ExecInitAgg中初始化時(shí)有對(duì)AggState中有pergroups等進(jìn)行初始化[AggState的解釋見上一篇:GreenPlum7聚合操作結(jié)構(gòu)體之間關(guān)系
那么什么是pergroups呢,它的作用是什么?
ExecInitAgg中:可以看到組數(shù)等于組集合數(shù)(若沒hash的話),每個(gè)分組中有numaggs個(gè)聚集
這里就需要理解什么是grouping sets。
PostgreSQL9.5版本引入了group by的分組集合功能,提供了GROUPING SETS,CUBE,ROLLUP參數(shù)。這些新的標(biāo)準(zhǔn)SQL選項(xiàng)可以讓用戶在一次查詢中生成多個(gè)不同級(jí)別或者多維度的報(bào)表,而不是像以前一樣需要幾次查詢。
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:根據(jù)name和class字段求和:
可以看到到僅一個(gè)聚合分類。那么再看下GROUPING SETS語法:
有3種聚合分類:1)針對(duì)name進(jìn)行分組然后求sum值;2)針對(duì)class進(jìn)行分組,然后求sum值;3)grouping sets種的空,表示所有行都聚合到一個(gè)分組中。
需要注意,grouping sets的集合中,一個(gè)括號(hào)一個(gè)分組,如下(name,class)為一個(gè)分組。該語句等價(jià)于普通的group by。
總結(jié):grouping sets中有一個(gè)集合,則有一個(gè)聚合;若有2個(gè)集合,則2個(gè)聚合。
-
SQL
+關(guān)注
關(guān)注
1文章
781瀏覽量
44820
發(fā)布評(píng)論請(qǐng)先 登錄
ADS4125數(shù)據(jù)輸出口接了緩存器和排阻,這排阻的作用是什么呢?
ADS1298配置寄存器3:RLD_LOFF_SENS位的控制作用是什么呢?
ads1174中的DIN腳的功能說是Daisy-chain,它的作用是什么?
AFE4400血氧模塊的AFE_PDNZ管腳是輸入口還是輸出口,它的作用是什么樣的?
ADS1291在心電測量中這四個(gè)10M歐姆電阻的作用是什么呢?
D類功放喇叭輸出端會(huì)接RC串聯(lián)在喇叭上面,它的作用是什么?
電機(jī)驅(qū)動(dòng)器是什么?它的主要作用是什么?
rtthread是搶占式的rtos,那么線程的timeout參數(shù)具體的作用是什么呢?
大帶寬服務(wù)器的作用是什么
請(qǐng)問跟隨器的具體作用是什么?
什么是PCB三防膠?它的作用是什么?

評(píng)論