文档章节

Mysql的with rollup(5.1以上版本)

s
 sunsyu
发布于 2017/04/13 16:05
字数 799
阅读 8
收藏 0

使用 GROUP BY 的 WITH ROLLUP 字句可以检索出更多的分组聚合信息,它不仅仅能像一般的 GROUP BY 语句那样检索出各组的聚合信息,还能检索出本组类的整体聚合信息。RollUp是上卷功能,类似于数据挖掘中的上卷操作。ROLLUp的功能和Order by功能是互斥的。

GROUPBY子句允许使用WITH ROLLUP,从而使额外的行被添加到输出的结果。这些行代表上级(或超总量)汇总操作。ROLLUP使你可以在一个单一的查询中统计多种数据。它可以使用在例如,OLAP(在线分析处理)操作。

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

CREATE TABLE sales ( year INT NOT NULL, country VARCHAR(20) NOT NULL, product VARCHAR(32) NOT NULL, profit INT );

对年进行分类操作,统计每年的总费用

mysql> SELECT year, SUM(profit) FROM sales GROUP BY year; +------+-------------+
| year | SUM(profit) | +------+-------------+
| 2000 |        4525 |
| 2001 | 3010 | +------+-------------+

如果我们还相爱那个在统计每一年的总费用的同时,在统计所有年的总费用,则我们仅仅只需要添加with roll即可

mysql> SELECT year, SUM(profit) FROM sales GROUP BY year WITH ROLLUP; +------+-------------+
| year | SUM(profit) | +------+-------------+
| 2000 |        4525 |
| 2001 |        3010 |
| NULL | 7535 | +------+-------------+

当GROUP BY有多个组列时,ROLLUP有更复杂的效果。在这种情况下,每个GROUP BY都有的属性都会产生一个“中断”(值的变化),除了在最后一个分组列不产生中断,最后查询产生一个额外的超级汇总汇总行。
举例如下:

mysql> SELECT year, country, product, SUM(profit)
 -> FROM sales
 -> GROUP BY year, country, product; +------+---------+------------+-------------+
| year | country | product | SUM(profit) | +------+---------+------------+-------------+
| 2000 | Finland | Computer   |        1500 |
| 2000 | Finland | Phone      |         100 |
| 2000 | India   | Calculator |         150 |
| 2000 | India   | Computer   |        1200 |
| 2000 | USA     | Calculator |          75 |
| 2000 | USA     | Computer   |        1500 |
| 2001 | Finland | Phone      |          10 |
| 2001 | USA     | Calculator |          50 |
| 2001 | USA     | Computer   |        2700 |
| 2001 | USA     | TV         |         250 |

如果使用了 ROLLUP 语句,则会产生额外的几行数据:

mysql> SELECT year, country, product, SUM(profit)
 -> FROM sales
 -> GROUP BY year, country, product WITH ROLLUP; +------+---------+------------+-------------+
| year | country | product | SUM(profit) | +------+---------+------------+-------------+
| 2000 | Finland | Computer   |        1500 |
| 2000 | Finland | Phone      |         100 |
| 2000 | Finland | NULL       |        1600 |
| 2000 | India   | Calculator |         150 |
| 2000 | India   | Computer   |        1200 |
| 2000 | India   | NULL       |        1350 |
| 2000 | USA     | Calculator |          75 |
| 2000 | USA     | Computer   |        1500 |
| 2000 | USA     | NULL       |        1575 |
| 2000 | NULL    | NULL       |        4525 |
| 2001 | Finland | Phone      |          10 |
| 2001 | Finland | NULL       |          10 |
| 2001 | USA     | Calculator |          50 |
| 2001 | USA     | Computer   |        2700 |
| 2001 | USA     | TV         |         250 |
| 2001 | USA     | NULL       |        3000 |
| 2001 | NULL    | NULL       |        3010 |
| NULL | NULL | NULL | 7535 | +------+---------+------------+-------------+

对于这个查询语句,添加ROLLUP 使输出包括四个层次的分析汇总信息,不只是一个。这里是如何解释汇总输出:
1、在给定year 和country的每一组汇总行之后,将产生一个额外的汇总行,显示所有product的总数。这些行有将product列设置为空,计算的是当前的year 和country对应的product的总数。
2、在给定的一年中的每一行之后,将产生一个额外的汇总行,显示所有country和product的总数。这些行将country和product列设置为空,计算的是当前的year 对应的总数。
3、最后,所有其他行,一个额外的汇总行产生显示总为所有year ,country和product。这一行将这三列都设置为空,即计算的是所有的总数。

© 著作权归作者所有

s
粉丝 0
博文 109
码字总数 135924
作品 0
深圳
私信 提问
(五)MySQL数据库-where子语句限定条件

版权声明:转载请注明原文地址 https://blog.csdn.net/Super_RD/article/details/89762992 (五)MySQL数据库-where子语句限定条件 我的系统版本为CentOS7.5,MySQL版本为5.7.26 操作符 LIKE...

Super_RD
05/02
0
0
MySQL Cluster 7.1.10 GA 发布

MySQL Cluster 是 MySQL 适合于分布式计算环境的高实用、高冗余版本。它采用了NDB Cluster 存储引擎,允许在1个 Cluster 中运行多个MySQL服务器。在MyQL 5.0及以上的二进制版本中、以及与最新...

红薯
2011/02/12
635
0
phpMyAdmin 3.0.0 发行

phpMyAdmin 3.0.0 支持MySQL 5.1,以及Maria和PBXT存储引擎,该版本需要PHP 5.2的支持,并且至少是MySQL 5.0以上的版本. 详情请看这里:http://sourceforge.net/forum/forum.php?forum_id=871388...

红薯
2008/09/28
271
0
MySQL Cluster 7.1.15a 发布

MySQL Cluster 7.1.15a 发布了,下载地址: http://dev.mysql.com/downloads/cluster/7.1.html 该版本改进记录请看: http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-news-5-1-56-n......

红薯
2011/08/28
434
1
MySQL Cluster 7.1.9 GA 发布

MySQL Cluster 是 MySQL 适合于分布式计算环境的高实用、高冗余版本。它采用了NDB Cluster 存储引擎,允许在1个 Cluster 中运行多个MySQL服务器。在MyQL 5.0及以上的二进制版本中、以及与最新...

红薯
2010/11/12
556
2

没有更多内容

加载失败,请刷新页面

加载更多

3_数组

3_数组

行者终成事
21分钟前
3
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0
使用logstash同步MySQL数据到ES

概述   在生成业务常有将MySQL数据同步到ES的需求,如果需要很高的定制化,往往需要开发同步程序用于处理数据。但没有特殊业务需求,官方提供的logstash就很有优势了。   在使用logstas...

zxiaofan666
今天
10
0
X-MSG-IM-分布式信令跟踪能力

经过一周多的鏖战, X-MSG-IM的分布式信令跟踪能力已基本具备, 特点是: 实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口. 完备. 可以完整...

dev5
今天
7
0
OpenJDK之CyclicBarrier

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CyclicBarrier是Doug Lea在JDK1.5中引入的,作用就不详细描述了,主要有如下俩个方法使用: await()方法,如果当前线...

克虏伯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部