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

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

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

  1. <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;
  2. +------+--------+------+------+------+
  3. | id | name | dep | pos | sal |
  4. +------+--------+------+------+------+
  5. | 1 | abcd | 01 | 01 | 1000 |
  6. | 2 | eefs | 01 | 02 | 2000 |
  7. | 3 | micro | 02 | 01 | 1500 |
  8. | 4 | cathey | 02 | 02 | 3000 |
  9. | 5 | amy | 03 | 01 | 2500 |
  10. | 6 | lily | 03 | 02 | 2200 |
  11. | 7 | bobo | 01 | 01 | 2000 |
  12. | 8 | gray | 01 | 02 | 1900 |
  13. | 9 | leon | 03 | 02 | 2900 |
  14. | 10 | sun | 02 | 02 | 1900 |
  15. +------+--------+------+------+------+
  16. 10 rows in set (0.00 sec)

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

  1. mysql> select dep,pos,avg(sal) from employee group by dep,pos;
  2. +------+------+-----------+
  3. | dep | pos | avg(sal) |
  4. +------+------+-----------+
  5. | 01 | 01 | 1500.0000 |
  6. | 01 | 02 | 1950.0000 |
  7. | 02 | 01 | 1500.0000 |
  8. | 02 | 02 | 2450.0000 |
  9. | 03 | 01 | 2500.0000 |
  10. | 03 | 02 | 2550.0000 |
  11. +------+------+-----------+
  12. 6 rows in set (0.02 sec)

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

  1. mysql> select dep,pos,avg(sal) from employee group by dep,pos with rollup;
  2. +------+------+-----------+
  3. | dep | pos | avg(sal) |
  4. +------+------+-----------+
  5. | 01 | 01 | 1500.0000 |
  6. | 01 | 02 | 1950.0000 |
  7. | 01 | NULL | 1725.0000 |
  8. | 02 | 01 | 1500.0000 |
  9. | 02 | 02 | 2450.0000 |
  10. | 02 | NULL | 2133.3333 |
  11. | 03 | 01 | 2500.0000 |
  12. | 03 | 02 | 2550.0000 |
  13. | 03 | NULL | 2533.3333 |
  14. | NULL | NULL | 2090.0000 |
  15. +------+------+-----------+
  16. 10 rows in set (0.00 sec)

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

(转)MYSQL 的 WITH ROLLUP的更多相关文章

  1. mysql的with rollup

    无意间发现了mysql的with rollup函数(用在group by 函数后面) 测试 1. SELECT NAME,DATE,score FROM stu 结果是 2. SELECT NAME, ...

  2. Mysql,Oracle使用rollup函数完成行列统计

    时间 2014-02-25 00:05:38  ITeye-博客 原文  http://53873039oycg.iteye.com/blog/2021445 主题 MySQLOracle数据库 昨天 ...

  3. Mysql的with rollup分组统计功能(5.1以上版本)

    RollUp是上卷功能,类似于数据挖掘中的上卷操作. ROLLUp的功能和Order by功能是互斥的. mysql> SELECT year, SUM(profit) FROM sales G ...

  4. mysql ,with rollup的用法

    如下,可以看到使用后,也统计了null的个数. mysql> select * from table1; +----------+------------+-----+------------- ...

  5. MySQL 聚合函数(二)Group By的修饰符——ROLLUP

    原文为MySQL 5.7 官方手册:12.20.2 GROUP BY Modifiers 一.ROLLUP 修饰符的意义 GROUP BY子句允许添加WITH ROLLUP修饰符,该修饰符可以对分组后 ...

  6. 第八章 SQL高级处理 8-2 GROUPING运算符

    一.同时得到合计行 合计行是不指定聚合键时得到的汇总结果. UNION ALL与UNION的不同之处是它不会对结果进行排序,因此比UNION性能更好.   二.ROLLUP——同时得出合计和小计 GR ...

  7. MySQL中的WITH ROLLUP

    MySQL中的WITH ROLLUP MySQL的扩展SQL中有一个非常有意思的应用WITH ROLLUP,在分组的统计数据的基础上再进行相同的统计(SUM,AVG,COUNT…),非常类似于Orac ...

  8. mysql中的with rollup得到group by的汇总信息

    使用mysql中的with rollup可以得到每个分组的汇总级别的数据: 表如下: CREATE TABLE `test3` (  `id` int(5) unsigned NOT NULL AUT ...

  9. Mysql中的WITH ROLLUP用法

    1.WITH ROLLUP:在group分组字段的基础上再进行统计数据. 例子:首先在name字段上进行分组,然后在分组的基础上进行某些字段统计,表结构如下: CREATE TABLE `test` ...

随机推荐

  1. 查看Linux系统用户登录日志

    日志: /var/log/wtmp说明: 此文件是二进制文件,查看方法如下:该日志文件永久记录每个用户登录.注销及系统的启动.停机的事件.因此随着系统正常运行时间的增加,该文件的大小也会越来越大,增加 ...

  2. serial console

    适用于: agent_ipmitool_socat pxe_ipmitool_socat 修改driver方式:更换ironic node的driver类型 yum install -y socat ...

  3. 1064 Complete Binary Search Tree (30 分)(二叉查找树)

    中序遍历建树 #include<bits/stdc++.h> using namespace std; ; int s[N]; int n; int tree[N]; int cnt; v ...

  4. sublime3 Package Control和 中文安装

    sublime3中文版需要使用PackageControl,所以首先需要安装PackageControl 一.PackageControl安装: 1.点击Preferences > Browse ...

  5. 台州学院we are without brain 训练 后缀数组

    sa[i]表示排名为 i 的后缀的第一个字符在原串中的位置 rank[i]表示按照从小到大排名  以i为下标开始的后缀的排名 height[i]表示排名为 i 和排名为 i+1的后缀的最长公共前缀的长 ...

  6. [转]Docker学习笔记之一,搭建一个JAVA Tomcat运行环境

    本文转自:http://www.blogjava.net/yongboy/archive/2013/12/12/407498.html 前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 ...

  7. sql的over函数的使用

    over不能单独使用,要和分析函数:rank(),dense_rank(),row_number()等一起使用.其参数:over(partition by columnname1 order by c ...

  8. UVALive 5029 字典树

    E - Encoded Barcodes Crawling in process...Crawling failedTime Limit:3000MS    Memory Limit:0KB    6 ...

  9. CodeForces B. Creating the Contest

    http://codeforces.com/contest/1029/problem/B You are given a problemset consisting of nn problems. T ...

  10. [CF1045C]Hyperspace Highways

    题目大意:给一张$n$个点$m$条边的图,保证若有一个环,一定是完全子图,多次询问两个点之间的最短路径长度 题解:把完全子图缩成一个点,圆方树,方点权值设成$1$,圆点设成$0$即可. 卡点:数组开小 ...