mysql支持cube_mysql聚合函数rollup和cube

一、with rollup:

with rollup通常和group by语句一起使用,是根据维度在分组的结果集中进行聚合操作。——对group by的分组进行汇总。

假设用户需要对N个纬度进行聚合查询操作,普通的groupby语句需要N个查询和N次group by操作。而rollup的有点是一次可以去的N次groupby的结果,这样可以提高查询效率,同时大大减少网络的传输流量。

1、rollup演示:

1)创建表:

createtablerollup(

orderidintnotnull,

orderdatedatenotnull,

empidintnotnull,

custidvarchar(10)notnull,

qtyintnotnull,

primary key(orderid,orderdate));

2)插入数据:

insertintorollupselect1,\'2010-01-02\',3,\'A\',10;

insertintorollupselect2,\'2010-04-02\',2,\'B\',20;

insertintorollupselect3,\'2010-05-02\',1,\'A\',30;

insertintorollupselect4,\'2010-07-02\',3,\'D\',40;

insertintorollupselect5,\'2011-01-02\',4,\'A\',20;

insertintorollupselect6,\'2011-01-02\',3,\'B\',30;

insertintorollupselect7,\'2011-01-02\',1,\'C\',40;

insertintorollupselect8,\'2009-01-02\',2,\'A\',10;

insertintorollupselect9,\'2009-01-02\',3,\'B\',20;

3)首先按照年份分组、统计销量;然后在对年份这一个纬度进行聚合

selectyear(orderdate)year,sum(qty)sumfromrollupgroup by yere(orderdate);

0818b9ca8b590ca3270a3433284dd417.png

然后对年份进行聚合:

selectyear(orderdate)year,sum(qty)sumfromrollup

group by yere(orderdate)with rollup;

0818b9ca8b590ca3270a3433284dd417.png

和普通的groupby差别不大,只是多了一个(null,220),表示对所有的year再做一次聚合,即订单数量总和。对单个唯独进行rollip操作只是可以在最后得到聚合的数据,对比groupby语句并没有非常大的优势。

4)对多个纬度进行聚合:

selectempid,custid,year(orderdate)year,sum(qty)sumfromrollup

group by empid,custid,year(orderdate)

with rollup;

0818b9ca8b590ca3270a3433284dd417.png

对三次分组都进行了聚合,一个有三种聚合,其中:

(null,null,null)表示最后的聚合

(empid,null,null)表示仅对(empid)一列进行分组的聚合结果

(empid,custid,null)表示对(empid,custid)两列进行分组的聚合结果

(empid,custid,year)表示对这3列进行分组的聚合结果——也就是group by本身聚集

所以,上面结果等价于:(未排序)

selectempid,custid,year(orderdate)year,sum(qty)sumfromrollup

group by empid,custid,year(orderdate)

union

selectempid,custid,null,sum(qty)sumfromrollup

group by empid,custid

union

selectempid,null,null,sum(qty)sumfromrollup

group by empid

union

selectnull,null,null,sum(qty)sumfromrollup

2、rollup注意:

1)ORDER BY不能在rollup中使用,两者为互斥关键字;

2)如果分组的列包含NULL值,那么rollup的结果可能不正确,因为在rollup中进行的分组统计时,null具有特殊意义。因此在进行rollup时可以先将

null转换成一个不可能存在的值,或者没有特别含义的值,比如:IFNULL(xxx,0)

3)mysql中没有像oracle那样的grouping()函数;

【实例】

selectifnull(dept,'总计') as '部门',ifnull(phone,'小计') as '电话',sum(money) as '金额' fromgroupTable group by

dept,phone with rollup;

+--------+------+------+

|部门|电话| 金额|

+--------+------+------+

|财务部| 6001 |   10 |

|财务部| 6003 |  100 |

|财务部|小计|  110 |

|营业部| 8001 |   20 |

|营业部| 8002 |   30 |

|营业部|小计|   50 |

|总计|小计|  160 |

+--------+------+------+

二、cube:

rollup是cube的一种特殊情况,和rollup一样,cube也是一种对数据的聚合操作。但是rollup只在层次上对数据进行聚合,而cube对所有的维度进行聚合。具有N个维度的列,cube需要2的N次方次分组操作,而rollup只需要N次分组操作。

在mysql5.6.17版本中,只定义了cube,但是不支持cube操作。

2、rollup和cube的区别:

1)假设有n个维度,rollup会有n个聚合:

rollup(a,b)   统计列包含:(a,b)、(a)、()

rollup(a,b,c)统计列包含:(a,b,c)、(a,b)、(a)、()

……以此类推ing……

2)假设有n个纬度,cube会有2的n次方个聚合

cube(a,b)     统计列包含:(a,b)、(a)、(b)、()

cube(a,b,c)  统计列包含:(a,b,c)、(a,b)、(a,c)、(b,c)、(a)、(b)、(c)、()

……以此类推ing……

3、可以用rollup来模拟cube:

select

empid,custid,year(orderdate)year,sum(qty)sumfromrollup

group by empid,custid,year(orderdate)

with rollup

union

select

empid,custid,year(orderdate)year,sum(qty)sumfromrollup

group by empid,year(orderdate),custid

with rollup

union

select

empid,custid,year(orderdate)year,sum(qty)sumfromrollup

group by custid,year(orderdate),empid

with rollup

union

select

empid,custid,year(orderdate)year,sum(qty)sumfromrollup

group by custid,empid,year(orderdate)

with rollup

union

select

empid,custid,year(orderdate)year,sum(qty)sumfromrollup

group byyear(orderdate),empid,custid

with rollup

union

select

empid,custid,year(orderdate)year,sum(qty)sumfromrollup

group byyear(orderdate),empid,custid

with rollup;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459251.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

域名详解

定义 是由一串用 “.” 分割的字符组成的Internet上某一台计算机或计算机组的名称,域名的本质是IP地址的一个映射,域名的目的是便于记忆和沟通的一组服务器的地址。 域名解析 域名解析的过程实际上是将域名还原为IP地址的过程 (1&#xf…

navicat远程mysql_navicat 远程连接mysql

一、修改用户权限:需要手动增加可以远程访问数据库的用户。方法一(不推荐)、本地登入mysql,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,将"localhost"改为"%"#mysql -u root -proo…

应用层协议:HTTP与HTTPS协议详解、二者的区别

http协议详解 1、HTTP协议:超文本传输协议 是一种分布式、合作式、多媒体信息系统服务,面向应用层的协议。是一种通用的,不分状态的协议。是一种请求/应答协议。1.1、HTTP/1.0和HTTP/1.1的比较 RFC 1945定义了HTTP/1.0版本。其中最著名的就…

Mutual and feedback(互评与反馈)

互评与反馈: 注:我在收集各小组对我小组的评价了,发现有几个没有收集到,不知道是我看不到还是贵小组不小心遗漏了对我小组的评价,如果看到,请给我留意,谢谢! 组名 对…

php mysql xa事务_XA mysql php 分布式事务

$XAuniqid("");$db->query("XASTART$XA");$db1->query("XASTART$XA");$insert1"insertintomytablevalues(?,?,?,?,?)";$paramsarray(12345678,123456789,444,555,1);$db->inser...$XA uniqid("");$db -> …

[POJ 1330] Nearest Common Ancestors (倍增法)

题目同上篇&#xff0c;最近公共祖先。 因为没有清零tot&#xff0c;RE了好多次TAT 一定要初始化啊&#xff01;&#xff01; 1 #include<cstdio>2 #include<cstring>3 #include<queue>4 #include<iostream>5 using namespace std;6 int root,head[100…

javascript console 函数详解 js开发调试的利器 浏览:3201|更新:2014-05-30 09:27

引用地址&#xff1a;http://jingyan.baidu.com/article/e75aca855c6419142edac6c1.html一键约师傅百度师傅最快的到家服务&#xff0c;最优质的电脑清灰&#xff01;Console 是用于显示 JS和 DOM 对象信息的单独窗口。并且向 JS 中注入1个 console 对象&#xff0c;使用该对象…

链路层基本问题 : 封装成帧、差错检测、流量控制

一、封装成帧 1、MAC帧 类型字段 &#xff08;2个字节&#xff09;&#xff1a; 用来标志上一层使用的是什么协议&#xff0c;以便把收到的MAC帧的数据上交给上一层的这个协议。 数据字段 &#xff08;46-1500&#xff09;&#xff1a; 正式名称是MAC客户数据字段最小长度6…

mysql 5.7 super_MySQL 5.7 下的对super用户只读

在MySQL的主从复制场景下&#xff0c;遇上slave被意外写入数据是一件比较严重的问题&#xff0c;毕竟在一般情况下我们都希望slave仅用只读数据库&#xff0c;如果被意外写入数据可能会造成数据的不一致&#xff0c;从而导致主从的报错。因此在MySQL中可以通过设置变量参数read…

CSS 链接

2019独角兽企业重金招聘Python工程师标准>>> 不同的链接可以有不同的样式。 链接样式 链接的样式&#xff0c;可以用任何CSS属性&#xff08;如颜色&#xff0c;字体&#xff0c;背景等&#xff09;。 特别的链接&#xff0c;可以有不同的样式&#xff0c;这取决于他…

iOS项目开发优秀文章汇总

UI界面 iOS和Android 界面设计尺寸规范 http://www.alibuybuy.com/posts/85486.html iPhone app界面设计尺寸规范 http://www.wufangbo.com/ios-iphone-app/ iOS界面设计切图小结 http://www.apkbus.com/android-140341-1-1.html 2x图片等适应不同分辨率手机 http://blog.…

数据链路层:ARP协议详解(绝对经典)

&#xff11;、ARP协议定义&#xff1a; 地址解析协议&#xff0c;工作在数据链路层&#xff0c;在本层和硬件接口联系&#xff0c;同时向上层提供服务。IP数据包常通过以太网发送&#xff0c;以太网设备不识别32位IP地址&#xff0c;他们是以48位以太网地址传输以太网数据包的…

php pdo操作mysql_PHP操作数据库详细(PDO)

PHP 5.1 发布时将附带一个全新的数据库连接层&#xff0c;即 PHP Data Objects (PDO)。虽然 PHP 一直都拥有很好的数据库连接&#xff0c;但 PDO 让 PHP的数据库操作 达到一个新的高度。PDO可支持基本的MySQL、Microsoft SQL Server、Oracle等数据库&#xff0c;并且提供了统一…

HTTP POST请求报文格式分析与Java实现文件上传

时间 2014-12-11 12:41:43 CSDN博客原文 http://blog.csdn.net/bboyfeiyu/article/details/41863951主题 HTTP HttpComponents在开发中&#xff0c;我们使用的比较多的HTTP请求方式基本上就是GET、POST。其中GET用于从服务器获取数据&#xff0c;POST主要用于向服务器提交一些…

网络层:IP协议详解(IP协议真的得看这篇)

1、IP协议概念 IP&#xff08;Internet Protocol , 互联网协议&#xff09;主要用于互联网通信。IP协议用于将多个包交换网络连接起来&#xff0c;他在原地址和目的地址之间传输数据报&#xff0c;还提供对数据大小的重新组装功能&#xff0c;以适应不同网络的要求。 IP协议是…

mysql my.cnf_如何知道mysql的my.cnf位置

你实际上可以让MySQL显示搜索my.cnf(或Windows上的my.ini)的所有位置的列表。 它不是一个SQL命令。 是终端命令&#xff0c;执行&#xff1a;$ mysqld –help –verbose在第一行&#xff0c;你会发现一个消息&#xff0c;列出所有my.cnf位置。 在我的机器上是&#xff1a;Defau…

传输层两大协议:TCP与UDP详解(两者的联系与区别)

一、TCP协议 1、TCP协议报文格式 TCP协议报文格式详解 2、TCP“三次握手”建立连接 位码即tcp标志位,有6种标示: SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急) Sequence number(顺序号码) Ac…

2016-01-17

1.《将来的你&#xff0c;一定会感谢现在拼命地自己》 感觉是一本总结的书&#xff0c;有方向、胸怀、习惯、幸运、内心、浮躁等等&#xff0c;现在有时候还拿出来温故一番。可以拥有。 2.《华为研发》 一本介绍华为的发展史&#xff0c;包括华为的一些故事&#xff0c;最令人印…

方法调方法(委托方式)

具有功能的实现方法&#xff0c;这个方法是一个吧数据插入到数据库然后再插入到listview的方法&#xff0c;使用for循环不断的调用这个方法进行插入&#xff1a; /// <summary>/// 获得Excel的名称和代号/// </summary>private void GetData(string name, string p…

docker二进制安装mysql_Docker搭建MySQL读写分离主从模式 分布式数据库中间件Mycat分库分表应用...

一、MySQL读写分离主从模式1. 下载镜像docker pull mysql当前最新版本&#xff1a;mysql Ver 8.0.19 for Linux on x86_64 (MySQL Community Server - GPL)2. 启动主节点并修改配置文件docker run -it --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD123456 mysql bash修改/…