更新时间:2025-03-13 GMT+08:00

Group

算子说明

Group算子用于处理Group By子句,对下层排序元组进行分组操作,返回结果是按分组键分组后的结果。

典型场景

分组操作:查询某列有多少个不同的值,其作用类似于DISTINCT。

示例

示例:查询语句中包含GROUP BY子句

--数据准备。 
gaussdb=# DROP TABLE IF EXISTS student;
gaussdb=# CREATE TABLE student(id integer, class_id integer, grade number); 
CREATE TABLE 
gaussdb=# INSERT INTO student VALUES(generate_series(1,50), 1, floor(100 * random())); 
INSERT 0 50 
gaussdb=# INSERT INTO student VALUES(generate_series(51,100), 2, floor(100 * random())); 
INSERT 0 50 
gaussdb=# INSERT INTO student VALUES(generate_series(101,150), 3, floor(100 * random())); 
INSERT 0 50 
gaussdb=# INSERT INTO student VALUES(generate_series(151,200), 3, floor(100 * random())); 
INSERT 0 50

--执行结果。 
gaussdb=# SET enable_hashagg = off;
SET
gaussdb=# EXPLAIN SELECT class_id FROM student GROUP BY class_id ORDER BY class_id; 
                                      QUERY PLAN
---------------------------------------------------------------------------------------
 Group  (cost=13.37..13.44 rows=26 width=4)
   Group By Key: class_id
   ->  Sort  (cost=15.27..15.33 rows=26 width=4)
         Sort Key: class_id
         ->  Streaming (type: GATHER)  (cost=14.18..14.65 rows=26 width=4)
               Node/s: All datanodes
               ->  Group  (cost=13.37..13.44 rows=26 width=4)
                     Group By Key: class_id
                     ->  Sort  (cost=13.37..13.40 rows=21 width=4)
                           Sort Key: class_id
                           ->  Seq Scan on student  (cost=0.00..13.13 rows=20 width=4)
(11 rows)

--删除。
gaussdb=# DROP TABLE student;

上述示例中,Group算子输出信息如下所示。

信息名称

含义

Group

算子的名称。

Group By Key

分组的关键字,示例中以class_id为关键字分组。

我们使用cookie来确保您的高速浏览体验。继续浏览本站,即表示您同意我们使用cookie。 详情