17回答

0收藏

何时使用GROUPING SETS,CUBE和ROLLUP

技术问答 技术问答 518 人阅读 | 17 人回复 | 2022-03-03

最近了解了用于在SQL Server多组集的定义GROUPING SETS,CUBE和ROLLUP。; X# d6 a7 A; F0 o) H* {0 A, q
我想问的是我们在什么情况下使用这些功能?使用它们和优点?! [8 _& _& h3 V  g  s/ U" b. x/ c
SELECT shipperid,YEAR(shippeddate) AS shipyear,COUNT(*) AS numordersFROM Sales.OrdersGROUP BY GROUPING SETS ( ( shipperid,YEAR(shippeddate) ),( shipperid ),( YEAR(shippeddate) ),( ) ;SELECT shipperid,YEAR(shippeddate) AS shipyear,COUNT(*) AS numordersFROM Sales.OrdersGROUP BY CUBE( shipperid,YEAR(shippeddate) );SELECT shipcountry,shipregion,shipcity,COUNT(*) AS numordersFROM Sales.OrdersGROUP BY ROLLUP( shipcountry,shipregion,shipcity );;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4 w, f8 X* M% b
    解决方案:                                                                9 h( ^. h4 X, K1 G. J/ C, p4 c7 w
                                                                首先,对于尚未阅读这个主题的人:& d3 D7 {' U* A: a7 r; g3 `5 Z
  • 将GROUP BY与ROLLUP,CUBE和GROUPING SETS一起使用尽管如此,不要将这些分组选项视为获取结果集的一种方式。这些都是性能工具    。
    ' L. m: T  W8 J) @. o: j1 b) D让我们以ROLLUP以一个简单的例子为例。
    0 g) G7 Q% W* z: H' s8 J$ Y8 J* w我可以用以下查询来获取GrpCol记录计数每个值。; B3 y$ L, s# b6 D5 l. C% ]) v7 ]  P
    SELECT   GrpCol,count(*) AS cntFROM     dbo.MyTableGROUP BY GrpCol我可以用以下查询来总结所有记录的数量。) t5 F5 D" X' @; H/ T2 Z7 V
    SELECT   NULL,count(*) AS cntFROM     dbo.MyTable而且,UNIONALL如果我使用ROLLUP如果第一个查询是通过上述两个查询编写的,结果可以与结果完全相同(这就是为什么它被放置在其中NULL的原因)。' ]; X8 e8 _$ z5 g" l( d
    事实上,把它作为两个不同的查询来执行可能更方便,因为这样我就可以结果与总结分开。我为什么要把我的最终总数和其他结果混合在一起?答案是同时使用ROLLUP句子会更有效。SQL
    8 r/ `) Y+ X  t" }; cServer将使用执行计划一次计算所有聚合物。与之相匹配UNIONALL比较结果相同但使用效率较低的执行计划(两次扫描而不是一次扫描)的示例。* E7 \; a" e* [9 H
    想象一个极端的例子,你正在处理一个巨大的数据集,每次扫描数据需要一个小时。您基本上必须每天提供关于数据的每个可能维度(切片方法)的总数。啊,哈哈!我敢打赌这些小组选项之一就是你需要的。如果将扫描结果保存在特殊的模式布局中,报告可以在一天的剩余时间内运行,而不是保存结果。3 v& U6 T/ ~* ?/ F+ S* g. }
    所以我基本上是说你在从事数据仓库项目。对我们其他人来说,它主要属于干净的事情类别。
  • 分享到:
    回复

    使用道具 举报

    回答|共 17 个

    木金

    发表于 2022-3-3 22:40:37 | 显示全部楼层

    楼主呀,,,您太有才了。。。
    回复

    使用道具 举报

    山人好梦

    发表于 2022-3-5 12:51:02 | 显示全部楼层

    在撸一遍。。。
    回复

    使用道具 举报

    火尽薪传

    发表于 2022-3-6 14:11:42 | 显示全部楼层

    顶起出售广告位
    回复

    使用道具 举报

    皮匠

    发表于 2022-3-7 08:42:42 | 显示全部楼层

    锄禾日当午,发帖真辛苦。谁知坛中餐,帖帖皆辛苦!
    回复

    使用道具 举报

    人甫寸

    发表于 2022-3-8 04:28:57 | 显示全部楼层

    LZ帖子不给力,勉强给回复下吧
    回复

    使用道具 举报

    李泽禛

    发表于 2022-3-8 15:37:52 | 显示全部楼层

    报告!别开枪,我就是路过来看看的。。。
    回复

    使用道具 举报

    清果冰纷

    发表于 2022-3-8 23:17:25 | 显示全部楼层

    路过 帮顶 嘿嘿
    回复

    使用道具 举报

    我可爱的太阳

    发表于 2022-3-9 05:06:21 | 显示全部楼层

    呵呵,低调,低调!
    回复

    使用道具 举报

    老流氓兔

    发表于 2022-3-9 10:26:57 | 显示全部楼层

    前排支持下
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    29055 积分
    9659 主题
    热门推荐