0
点赞
收藏
分享

微信扫一扫

#yyds干货盘点#什么是grouping sets

夕颜合欢落 2022-03-20 阅读 79

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字段求和:

#yyds干货盘点#什么是grouping sets_sql

可以看到到仅一个聚合分类。那么再看下GROUPING SETS语法:

#yyds干货盘点#什么是grouping sets_sql_02

有3种聚合分类:1)针对name进行分组然后求sum值;2)针对class进行分组,然后求sum值;3)grouping sets种的空,表示所有行都聚合到一个分组中。

需要注意,grouping sets的集合中,一个括号一个分组,如下(name,class)为一个分组。该语句等价于普通的group by。

#yyds干货盘点#什么是grouping sets_postgresql_03

总结:grouping sets中有一个集合,则有一个聚合;若有2个集合,则2个聚合。

举报

相关推荐

0 条评论