南大通用GBase 8a OLAP分析函数group by cube使用样例

GBase 8a通过group by cube函数,对每个指定的维度和维度组合做分别做group统计,最后将结果合并在一起构成全部子集。

参考

GBase 8a窗口函数使用样例索引

语法

GROUP BY CUBE(A,B,C) (A、B、C 代表语法中的“(…)”)

说明

首先会对(A、B、C)进行 GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),然后对全表进行 GROUP BY 操作,最后将所有结果合并在一起(相当于 UNION ALL 操作),如果 n 个字段或表达式中的一个或多个在某一分组中不出现在 GROUP BY 后面,用 NULL 代替不出现的字段或表达式。

样例

数据

学生科目成绩详单。

gbase> select * from score;
+--------+---------+-------+
| name   | subject | score |
+--------+---------+-------+
| 王海   | 语文    |    86 |
| 王海   | 数学    |    83 |
| 王海   | 英语    |    93 |
| 陶俊   | 语文    |    88 |
| 陶俊   | 数学    |    84 |
| 陶俊   | 英语    |    94 |
| 刘可   | 语文    |    80 |
| 刘可   | 数学    |    86 |
| 刘可   | 英语    |    88 |
| 李春   | 语文    |    89 |
| 李春   | 数学    |    80 |
| 李春   | 英语    |    87 |
+--------+---------+-------+
12 rows in set (Elapsed: 00:00:00.01)

计算学生,科目各个维度的CUBE

计算name,subject的cube,等同于

sum group by name,subject
union all
sum grouu by name
union all
sum group by subjcet
union all
sum 
gbase> select name,subject,sum(score) from score group by cube(name,subject);
+--------+---------+------------+
| name   | subject | sum(score) |
+--------+---------+------------+
| 王海   | 语文    |         86 |
| 王海   | 数学    |         83 |
| 王海   | 英语    |         93 |
| 陶俊   | 语文    |         88 |
| 陶俊   | 数学    |         84 |
| 陶俊   | 英语    |         94 |
| 刘可   | 语文    |         80 |
| 刘可   | 数学    |         86 |
| 刘可   | 英语    |         88 |
| 李春   | 语文    |         89 |
| 李春   | 数学    |         80 |
| 李春   | 英语    |         87 |
| NULL   | 语文    |        343 |
| NULL   | 数学    |        333 |
| NULL   | 英语    |        362 |
| 王海   | NULL    |        262 |
| 陶俊   | NULL    |        266 |
| 刘可   | NULL    |        254 |
| 李春   | NULL    |        256 |
| NULL   | NULL    |       1038 |
+--------+---------+------------+
20 rows in set (Elapsed: 00:00:00.02)

参考

其它OLAP函数请参考

GBase 8a OLAP分析函数group by rollup使用样例

GBase 8a OLAP函数group by grouping sets的使用样例