(转)MYSQL 的 WITH ROLLUP
使用 GROUP BY 的 WITH ROLLUP 字句可以检索出更多的分组聚合信息,它不仅仅能像一般的 GROUP BY 语句那样检索出各组的聚合信息,还能检索出本组类的整体聚合信息。
下面我们的例子对比了普通的 GROUP BY 操作和有 WITH ROLLUP 子句的 GROUP BY 操作的不同:
查询表的内容,是雇员的基础信息表:
- <a href="http://lib.csdn.net/base/14" class='replace_word' title="undefined" target='_blank' style='color:#df3434; font-weight:bold;'>MySQL</a>> 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 语句对结果集进行排序,如果对返回的结果顺序不满意,需要应用程序获得结果后在程序中进行排序。
(转)MYSQL 的 WITH ROLLUP的更多相关文章
- mysql的with rollup
无意间发现了mysql的with rollup函数(用在group by 函数后面) 测试 1. SELECT NAME,DATE,score FROM stu 结果是 2. SELECT NAME, ...
- Mysql,Oracle使用rollup函数完成行列统计
时间 2014-02-25 00:05:38 ITeye-博客 原文 http://53873039oycg.iteye.com/blog/2021445 主题 MySQLOracle数据库 昨天 ...
- Mysql的with rollup分组统计功能(5.1以上版本)
RollUp是上卷功能,类似于数据挖掘中的上卷操作. ROLLUp的功能和Order by功能是互斥的. mysql> SELECT year, SUM(profit) FROM sales G ...
- mysql ,with rollup的用法
如下,可以看到使用后,也统计了null的个数. mysql> select * from table1; +----------+------------+-----+------------- ...
- MySQL 聚合函数(二)Group By的修饰符——ROLLUP
原文为MySQL 5.7 官方手册:12.20.2 GROUP BY Modifiers 一.ROLLUP 修饰符的意义 GROUP BY子句允许添加WITH ROLLUP修饰符,该修饰符可以对分组后 ...
- 第八章 SQL高级处理 8-2 GROUPING运算符
一.同时得到合计行 合计行是不指定聚合键时得到的汇总结果. UNION ALL与UNION的不同之处是它不会对结果进行排序,因此比UNION性能更好. 二.ROLLUP——同时得出合计和小计 GR ...
- MySQL中的WITH ROLLUP
MySQL中的WITH ROLLUP MySQL的扩展SQL中有一个非常有意思的应用WITH ROLLUP,在分组的统计数据的基础上再进行相同的统计(SUM,AVG,COUNT…),非常类似于Orac ...
- mysql中的with rollup得到group by的汇总信息
使用mysql中的with rollup可以得到每个分组的汇总级别的数据: 表如下: CREATE TABLE `test3` ( `id` int(5) unsigned NOT NULL AUT ...
- Mysql中的WITH ROLLUP用法
1.WITH ROLLUP:在group分组字段的基础上再进行统计数据. 例子:首先在name字段上进行分组,然后在分组的基础上进行某些字段统计,表结构如下: CREATE TABLE `test` ...
随机推荐
- hasOne
public boolean hasOne(int n) { int lastdigit=0; while( n >0 ){ lastdigit=(n % 10); if(lastdigit== ...
- 剑指Offer - 九度1387 - 斐波那契数列
剑指Offer - 九度1387 - 斐波那契数列2013-11-24 03:08 题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项.斐波那契数列的定义如下: ...
- 架构师速成6.7-设计开发思路-uml 分类: 架构师速成 2015-07-29 18:25 157人阅读 评论(0) 收藏
uml是什么东西?统一建模语言,一门语言,是用来进行软件设计的一门语言. 其实一门语言的诞生并不伟大,让大多数人都使用才足够伟大.uml就是一门伟大的语言,因为目前软件设计的唯一语言就是它. UML其 ...
- UVa 11374 - Airport Express ( dijkstra预处理 )
起点和终点各做一次单源最短路, d1[i], d2[i]分别代表起点到i点的最短路和终点到i点的最短路,枚举商业线车票cost(a, b); ans = min( d1[a] + cost(a, b ...
- hadoop2.5.2学习及实践笔记(四)—— namenode启动过程源码概览
对namenode启动时的相关操作及相关类有一个大体了解,后续深入研究时,再对本文进行补充 >实现类 HDFS启动脚本为$HADOOP_HOME/sbin/start-dfs.sh,查看star ...
- POJ A-Wireless Network
http://poj.org/problem?id=2236 An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated ...
- IPV4的地址是如何分类的?网络号的范围分别是多少?
1. A类地址 (1)A类地址第1字节为网络地址,其它3个字节为主机地址. (2)A类地址范围:1.0.0.1—126.255.255.254 (3)A类地址中的私有地址和保留地址: ① 10.X.X ...
- 关于ECDSA/ECC(密钥加密传输)和ECDSA/ECDH(密钥磋商)
关于ECDSA/ECC(密钥加密传输)和ECDSA/ECDH(密钥磋商) 来源: https://blog.csdn.net/xueyepiaoling/article/details/6243337 ...
- background-size属性的几个实用的值
先来看w3c的background-size的几个值: background-size:cover; 把背景图像扩展至足够大,以使背景图像完全覆盖背景区域.背景图像的某些部分也许无法显示在背景定 ...
- [poj] 3690 Constellations || 矩阵hash
原题 在大矩阵里找有几个小矩阵出现过,多组数据 将t个矩阵hash值放入multiset,再把大矩阵中每个hash值从multiset里扔出去,这样最后剩在multiset里的值就是没有找到的小矩阵, ...