博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用 GROUP BY WITH ROLLUP 改善统计性能
阅读量:6476 次
发布时间:2019-06-23

本文共 1846 字,大约阅读时间需要 6 分钟。

使用 GROUP BY 的 WITH ROLLUP 字句可以检索出更多的分组聚合信息,它不仅仅能像一般的 GROUP BY 语句那样检索出各组的聚合信息,还能检索出本组类的整体聚合信息。

下面我们的例子对比了普通的 GROUP BY 操作和有 WITH ROLLUP 子句的 GROUP BY 操作的不同:

查询表的内容,是雇员的基础信息表:

mysql> select * from employee;  +------+--------+------+------+------+  | id | name | dep | pos | sal |  +------+--------+------+------+------+  | 1 | abcd | 01 | 01 | 1000 |  | 2 | eefs | 01 | 02 | 2000 |  | 3 | micro | 02 | 01 | 1500 |  | 4 | cathey | 02 | 02 | 3000 |  | 5 | amy | 03 | 01 | 2500 |  | 6 | lily | 03 | 02 | 2200 |  | 7 | bobo | 01 | 01 | 2000 |  | 8 | gray | 01 | 02 | 1900 |  | 9 | leon | 03 | 02 | 2900 |  | 10 | sun | 02 | 02 | 1900 |  +------+--------+------+------+------+  10 rows in set (0.00 sec)

普通的 GROUP BY 操作,可以按照部门和职位进行分组,计算每个部门,每个职位的工资平均值:

mysql> select dep,pos,avg(sal) from employee group by dep,pos;  +------+------+-----------+  | dep | pos | avg(sal) |  +------+------+-----------+  | 01 | 01 | 1500.0000 |  | 01 | 02 | 1950.0000 |  | 02 | 01 | 1500.0000 |  | 02 | 02 | 2450.0000 |  | 03 | 01 | 2500.0000 |  | 03 | 02 | 2550.0000 |  +------+------+-----------+  6 rows in set (0.02 sec)

如果我们希望再显示部门的平均值和全部雇员的平均值,普通的 GROUP BY 语句是不能实现的,需要另外执行一个查询操作,或者通过程序来计算。如果使用有 WITH ROLLUP 子句的 GROUP BY 语句,则可以轻松实现这个要求:

mysql> select dep,pos,avg(sal) from employee group by dep,pos with rollup;  +------+------+-----------+  | dep | pos | avg(sal) |  +------+------+-----------+  | 01 | 01 | 1500.0000 |  | 01 | 02 | 1950.0000 |  | 01 | NULL | 1725.0000 |  | 02 | 01 | 1500.0000 |  | 02 | 02 | 2450.0000 |  | 02 | NULL | 2133.3333 |  | 03 | 01 | 2500.0000 |  | 03 | 02 | 2550.0000 |  | 03 | NULL | 2533.3333 |  | NULL | NULL | 2090.0000 |  +------+------+-----------+  10 rows in set (0.00 sec)

需要注意的是,使用有 WITH ROLLUP 子句的 GROUP BY 语句时,不能再使用 ORDER BY 语句对结果集进行排序,如果对返回的结果顺序不满意,需要应用程序获得结果后在程序中进行排序。

 

 

 

转:http://blog.csdn.net/id19870510/article/details/6254358

 

你可能感兴趣的文章
[pat]1045 Favorite Color Stripe
查看>>
Immutable学习及 React 中的实践
查看>>
【转】性能测试步骤
查看>>
OSI与TCP/IP各层的结构与功能,都有哪些协议
查看>>
Android实例-程序切换到后台及从后台切换到前台
查看>>
spring boot启动定时任务
查看>>
值类型和引用类型
查看>>
[转]html5 Canvas画图教程(6)—canvas里画曲线之arcTo方法
查看>>
maven 常用插件
查看>>
算法 (二分查找算法)
查看>>
java Date 当天时间戳处理
查看>>
Python~迭代
查看>>
linux常用命令-关机、重启
查看>>
css布局 - 九宫格布局的方法汇总(更新中...)
查看>>
画图函数——点,线,矩形等等
查看>>
ejabberd_local
查看>>
BZOJ5020 [THUWC 2017]在美妙的数学王国中畅游LCT
查看>>
hdu 6030 矩阵快速幂
查看>>
tomcat类加载机制
查看>>
ado.net2.0中的缓存使用SqlDependency类
查看>>