GBase 8a 中group by grouping sets函数怎么使用?
GBase 8a 中group by grouping sets函数怎么使用?
收藏
复制链接
微信扫码分享

在小程序上查看
分享
1条回答
默认
最新
GROUP BY GROUPING SETS (A,B,C) (A、B、C 代表语法中的“(…)”)
首先对(A)进行 GROUP BY,然后对(B)进行 GROUP BY,然后对(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)
获得学生和学科各自的汇总结果
gbase> select name,subject,sum(score) from score group by grouping sets(name,subject);
+--------+---------+------------+
| name | subject | sum(score) |
+--------+---------+------------+
| NULL | 语文 | 343 |
| NULL | 数学 | 333 |
| NULL | 英语 | 362 |
| 王海 | NULL | 262 |
| 陶俊 | NULL | 266 |
| 刘可 | NULL | 254 |
| 李春 | NULL | 256 |
+--------+---------+------------+
7 rows in set (Elapsed: 00:00:00.02)
多个Sets之间也是union all关系。本例就简单的将上一个用例的2个条件,拆分一下。结果是一样的。
gbase> select name,subject,sum(score) from score group by grouping sets((name),(subject));
+--------+---------+------------+
| name | subject | sum(score) |
+--------+---------+------------+
| NULL | 语文 | 343 |
| NULL | 数学 | 333 |
| NULL | 英语 | 362 |
| 王海 | NULL | 262 |
| 陶俊 | NULL | 266 |
| 刘可 | NULL | 254 |
| 李春 | NULL | 256 |
+--------+---------+------------+
7 rows in set (Elapsed: 00:00:00.02)
gbase> select name,subject,sum(score) from score group by grouping sets(name,(name,subject));
+--------+---------+------------+
| name | subject | sum(score) |
+--------+---------+------------+
| 王海 | 语文 | 86 |
| 王海 | 数学 | 83 |
| 王海 | 英语 | 93 |
| 陶俊 | 语文 | 88 |
| 陶俊 | 数学 | 84 |
| 陶俊 | 英语 | 94 |
| 刘可 | 语文 | 80 |
| 刘可 | 数学 | 86 |
| 刘可 | 英语 | 88 |
| 李春 | 语文 | 89 |
| 李春 | 数学 | 80 |
| 李春 | 英语 | 87 |
| 王海 | NULL | 262 |
| 陶俊 | NULL | 266 |
| 刘可 | NULL | 254 |
| 李春 | NULL | 256 |
+--------+---------+------------+
16 rows in set (Elapsed: 00:00:00.04)
如上第二个例子中,第一部分是name, 第二部分是(name,subject)两个字段一起。
注意,不考虑重复,也就是你可以写多个name。
gbase> select name,subject,sum(score) from score group by grouping sets(name,name,subject);
+--------+---------+------------+
| name | subject | sum(score) |
+--------+---------+------------+
| NULL | 语文 | 343 |
| NULL | 数学 | 333 |
| NULL | 英语 | 362 |
| 王海 | NULL | 262 |
| 陶俊 | NULL | 266 |
| 刘可 | NULL | 254 |
| 李春 | NULL | 256 |
| 王海 | NULL | 262 |
| 陶俊 | NULL | 266 |
| 刘可 | NULL | 254 |
| 李春 | NULL | 256 |
+--------+---------+------------+
11 rows in set (Elapsed: 00:00:00.03)


打赏 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
