更新时间: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为关键字分组。 |
父主题: 运算符