本文介绍GBase 8a数据库集群内置的grouping函数使用,其和group by rollup/cube/grouping sets一起使用时才有效果。
目录导航
参考
GBase 8a OLAP函数group by grouping sets的使用样例
GBase 8a窗口函数使用样例索引
语法
GROUPING (expr)
说明
expr 参与group by rollup/cube/grouping sets的列。
- GROUPING 表示 GROUP BY 列表中的表达式是否参与分组。
- 返回1 表示不参与分组
- 返回 0 表示参与分组 。
- 对普通 GROUP BY 表达式 ,GROUPING 返回 0。
样例
数据
gbase> select * from t2;
+------+------+------+
| id | type | val |
+------+------+------+
| 1 | 1 | 111 |
| 2 | 1 | 122 |
| 3 | 1 | 133 |
| 4 | 2 | 222 |
| 5 | 2 | 233 |
| 6 | 2 | 244 |
| 7 | 3 | 333 |
+------+------+------+
7 rows in set (Elapsed: 00:00:00.01)
Grouping 在普通Group by的例子
返回0。
gbase> select type,sum(val),count(*) from t2 group by type;
+------+----------+----------+
| type | sum(val) | count(*) |
+------+----------+----------+
| 2 | 699 | 3 |
| 1 | 366 | 3 |
| 3 | 333 | 1 |
+------+----------+----------+
3 rows in set (Elapsed: 00:00:00.05)
Grouping 在group by rollup的例子
最后的汇总,type为全部,此时其并不参与group,所以grouping返回1。
gbase> select type,sum(val),count(*),grouping(type) from t2 group by rollup(type);
+------+----------+----------+----------------+
| type | sum(val) | count(*) | grouping(type) |
+------+----------+----------+----------------+
| 1 | 366 | 3 | 0 |
| 2 | 699 | 3 | 0 |
| 3 | 333 | 1 | 0 |
| NULL | 1398 | 7 | 1 |
+------+----------+----------+----------------+
4 rows in set (Elapsed: 00:00:00.03)
多列grouping的例子
多列时,当前分组级别不参与的列,返回1, 参与的返回0。
gbase> select type,(id%3) id,sum(val),count(*),grouping(type),grouping(id%3) from t2 group by rollup(type,id%3);
+------+------+----------+----------+----------------+----------------+
| type | id | sum(val) | count(*) | grouping(type) | grouping(id%3) |
+------+------+----------+----------+----------------+----------------+
| 1 | 1 | 111 | 1 | 0 | 0 |
| 1 | 2 | 122 | 1 | 0 | 0 |
| 1 | 0 | 133 | 1 | 0 | 0 |
| 2 | 1 | 222 | 1 | 0 | 0 |
| 2 | 2 | 233 | 1 | 0 | 0 |
| 2 | 0 | 244 | 1 | 0 | 0 |
| 3 | 1 | 333 | 1 | 0 | 0 |
| 1 | NULL | 366 | 3 | 0 | 1 |
| 2 | NULL | 699 | 3 | 0 | 1 |
| 3 | NULL | 333 | 1 | 0 | 1 |
| NULL | NULL | 1398 | 7 | 1 | 1 |
+------+------+----------+----------+----------------+----------------+
11 rows in set (Elapsed: 00:00:00.03)
gbase>
Grouping 在group by cube的例子
gbase> select type,(id%3) id,sum(val),count(*),grouping(type),grouping(id%3) from t2 group by cube(type,id%3);
+------+------+----------+----------+----------------+----------------+
| type | id | sum(val) | count(*) | grouping(type) | grouping(id%3) |
+------+------+----------+----------+----------------+----------------+
| 1 | 1 | 111 | 1 | 0 | 0 |
| 1 | 2 | 122 | 1 | 0 | 0 |
| 1 | 0 | 133 | 1 | 0 | 0 |
| 2 | 1 | 222 | 1 | 0 | 0 |
| 2 | 2 | 233 | 1 | 0 | 0 |
| 2 | 0 | 244 | 1 | 0 | 0 |
| 3 | 1 | 333 | 1 | 0 | 0 |
| NULL | 1 | 666 | 3 | 1 | 0 |
| NULL | 2 | 355 | 2 | 1 | 0 |
| NULL | 0 | 377 | 2 | 1 | 0 |
| 1 | NULL | 366 | 3 | 0 | 1 |
| 2 | NULL | 699 | 3 | 0 | 1 |
| 3 | NULL | 333 | 1 | 0 | 1 |
| NULL | NULL | 1398 | 7 | 1 | 1 |
+------+------+----------+----------+----------------+----------------+
14 rows in set (Elapsed: 00:00:00.04)
Grouping 在group by grouping sets的例子
请区分二者的区别,第一个grouping函数,第二个是和sets一起使用的。 GBase 8a OLAP函数group by grouping sets的使用样例
gbase> select type,(id%3) id,sum(val),count(*),grouping(type),grouping(id%3) from t2 group by grouping sets(type,id%3);
+------+------+----------+----------+----------------+----------------+
| type | id | sum(val) | count(*) | grouping(type) | grouping(id%3) |
+------+------+----------+----------+----------------+----------------+
| NULL | 1 | 666 | 3 | 1 | 0 |
| NULL | 2 | 355 | 2 | 1 | 0 |
| NULL | 0 | 377 | 2 | 1 | 0 |
| 1 | NULL | 366 | 3 | 0 | 1 |
| 2 | NULL | 699 | 3 | 0 | 1 |
| 3 | NULL | 333 | 1 | 0 | 1 |
+------+------+----------+----------+----------------+----------------+
6 rows in set (Elapsed: 00:00:00.03)