日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql聚合函数rollup和cube

發布時間:2023/12/10 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql聚合函数rollup和cube 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉:https://blog.csdn.net/liuxiao723846/article/details/48970443

一、with rollup:

with rollup?通常和group by?語句一起使用,是根據維度在分組的結果集中進行聚合操作。——對group by的分組進行匯總。

?

假設用戶需要對N個緯度進行聚合查詢操作,普通的groupby語句需要N個查詢和N次group by操作。而rollup的有點是一次可以去的N次groupby的結果,這樣可以提高查詢效率,同時大大減少網絡的傳輸流量。

?

1、rollup演示:

?

1)創建表:

create?table?rollup(

orderid?int?not?null,

orderdate?date?not?null,

empid?int?not?null,

custid?varchar(10)?not?null,

qty?int?not?null,

primary key(orderid,orderdate));

?

2)插入數據:

insert?into?rollup?select?1,\'2010-01-02\',3,\'A\',10;

insert?into?rollup?select?2,\'2010-04-02\',2,\'B\',20;

insert?into?rollup?select?3,\'2010-05-02\',1,\'A\',30;

insert?into?rollup?select?4,\'2010-07-02\',3,\'D\',40;

insert?into?rollup?select?5,\'2011-01-02\',4,\'A\',20;

insert?into?rollup?select?6,\'2011-01-02\',3,\'B\',30;

insert?into?rollup?select?7,\'2011-01-02\',1,\'C\',40;

insert?into?rollup?select?8,\'2009-01-02\',2,\'A\',10;

insert?into?rollup?select?9,\'2009-01-02\',3,\'B\',20;

?

3)首先按照年份分組、統計銷量;然后在對年份這一個緯度進行聚合

select?year(orderdate)?year,?sum(qty)?sum??from?rollupgroup by yere(orderdate)

?

然后對年份進行聚合:

?

select?year(orderdate)?year,?sum(qty)?sum??from?rollup

group by yere(orderdate)?with rollup;

?

和普通的groupby差別不大,只是多了一個(null,220),表示對所有的year再做一次聚合,即訂單數量總和。對單個唯獨進行rollip操作只是可以在最后得到聚合的數據,對比groupby語句并沒有非常大的優勢。

?

4)對多個緯度進行聚合:

select?empid,custid,?year(orderdate)?year,sum(qty)?sum?from?rollup

group by empid,custid,year(orderdate)

with rollup;

?

?

對三次分組都進行了聚合,一個有三種聚合,其中:

  • (null,null,null)表示最后的聚合
  • (empid,null,null)表示僅對(empid)一列進行分組的聚合結果
  • (empid,custid,null)表示對(empid,custid)兩列進行分組的聚合結果
  • (empid,custid,year)表示對這3列進行分組的聚合結果——也就是group by本身聚集

?

所以,上面結果等價于:(未排序)

select?empid,custid,year(orderdate)?year,sum(qty)?sum?from?rollup

group by empid,custid,year(orderdate)

union

select?empid,custid,null,sum(qty)?sum?from?rollup

group by empid,custid

union

select?empid,null,null,sum(qty)?sum?from?rollup

group by empid

union

select?null,null,null,sum(qty)?sum?from?rollup

?

?

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)?sum?from?rollup

group by empid,custid,year(orderdate)

with rollup

union

select?

????empid,custid,year(orderdate)?year,sum(qty)?sum?from?rollup

group by empid,year(orderdate),custid

with rollup

union

select?

????empid,custid,year(orderdate)?year,sum(qty)?sum?from?rollup

group by custid,year(orderdate),empid

with rollup

union

select?

????empid,custid,year(orderdate)?year,sum(qty)?sum?from?rollup

group by custid,empid,year(orderdate)

with rollup

union

select?

????empid,custid,year(orderdate)?year,sum(qty)?sum?from?rollup

group by?year(orderdate),empid,custid

with rollup

union

select?

????empid,custid,year(orderdate)?year,sum(qty)?sum?from?rollup

group by?year(orderdate),empid,custid

with rollup;

總結

以上是生活随笔為你收集整理的mysql聚合函数rollup和cube的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 麻豆国产原创 | 免费观看亚洲视频 | 国产综合激情 | 超碰精品在线 | 99在线国产 | 精品乱子伦一区二区三区 | jizz欧美| 亚洲精品aⅴ中文字幕乱码 国产精品调教视频 | 中文字幕伊人 | 免费污片在线观看 | 亚洲色成人一区二区三区小说 | 在线观看免费视频国产 | www.日本色 | 91色噜噜| 免费看的黄色小视频 | 亚洲a在线播放 | a级免费网站 | 日本亚洲欧美 | 国产第一页在线 | 久9精品 | 亚洲成人精品在线观看 | 国产精品成人免费精品自在线观看 | 7799精品视频天天看 | 成人小视频免费看 | 国产午夜福利一区二区 | 97人妻精品一区二区三区视频 | 狠狠干狠狠干 | 阿v免费在线观看 | 操欧美老逼 | 乱色精品无码一区二区国产盗 | 欢乐谷在线观看免费播放高清 | 夜间福利在线观看 | 亚洲无线观看 | 亚洲三页 | 国产午夜一区二区 | 在线视频日韩 | 亚洲一区 欧美 | 国产精品入口夜色视频大尺度 | 欧美激情在线播放 | 蜜臀久久精品久久久久久酒店 | 成人av在线播放网站 | 亚洲一区二区影视 | 日韩精品成人免费观看视频 | 亚洲综合第一区 | 日韩欧美一区二区三区 | 熟女少妇在线视频播放 | 91av影视 | av高清一区二区 | 日韩在线一级片 | 二区三区不卡 | 中文在线免费视频 | 欧美资源在线观看 | 中文字幕四区 | av操操操 | 国产内射一区 | 男人天堂视频在线 | 国产成人激情 | 亚洲深夜福利 | 精品久久久久久久无码 | 日本一二三区在线 | 午夜视频福利在线观看 | 超碰网站在线观看 | 中文字幕亚洲乱码熟女一区二区 | 日韩黄色片子 | 超碰成人福利 | 日韩美女av在线 | 久久久久性色av无码一区二区 | 欧美天天影院 | 蜜臀少妇久久久久久久高潮 | 国产区视频在线 | 亚洲喷潮 | 午夜亚洲国产 | 国产网友自拍视频 | 成人中文字幕在线观看 | 欧美一级全黄 | 夜夜草导航 | 亚洲视频福利 | av日韩在线免费观看 | 亚洲黄片一区 | 每日av在线 | 国产三级网站 | 中国国语农村大片 | 欧美最猛黑人xxxx黑人猛交 | 国产一二三在线观看 | 福利在线免费视频 | 男女靠逼视频 | 国产真实乱在线更新 | 夜夜摸夜夜爽 | 亚洲免费视频一区二区三区 | 欧美少妇性生活 | 91精品视频免费看 | 哪里看毛片 | 夜夜操天天干 | 少妇高潮av久久久久久 | 一区二区韩国 | 欧美性受xxx黑人xyx性爽 | 姐姐的秘密韩剧免费观看全集中文 | 农村妇女毛片精品久久久 | 亚洲成a人片在线www |