今天我已经阅读了关于在GROUP BY子句中使用多个GROUPING SETS,CUBE和ROLLUP子句的提示。
您可以在中指定多个GROUPING SETS,CUBE和ROLLUP子句 GROUP BY子句用逗号分隔。通过这样做,你实现了 乘法效应。例如,CUBE(a,b,c)子句定义 八个分组集和子句ROLLUP(x,y,z)定义了四个 分组集。通过在两者之间指定逗号,如在CUBE(a,b, c),ROLLUP(x,y,z),你将它们相乘并得到32个分组集。
这是一个例子。
SELECT
shipcountry, GROUPING(shipcountry) AS grpcountry,
shipcity , GROUPING(shipcity) AS shipcity,
GROUPING_ID( shipcountry, shipcity ) AS grp_id,
COUNT(*) AS numorders
FROM Sales.Orders
GROUP BY CUBE(shipcountry,shipcity), ROLLUP(shipcountry, shipcity)
不能把头包裹起来。问题是,结果集中有很多重复的行。如果我们将DISTINCT添加到SELECT子句,即使没有ROLLUP(shipcountry,shipcity),结果集也是相同的。重点是什么?
答案 0 :(得分:2)
我认为在为cube和rollup子句指定不同的参数时会出现该实用程序。无论你引用什么来源,这都是显而易见的。立方体和汇总中的每一个都只是较长的分组集列表的快捷方式。在您的示例中,多维数据集定义了以下分组集
汇总指定了这些集合:
当您在同一group by子句中指定两者时,您将从第一组中获取每组与第二组中的每一组(这是拉引号的乘法效应所暗示的)。所以你得到(使用命名法“(x)+(y)”来表示“第一组中的项目x和第二组中的项目y”:
正如您所看到的,有很多重复。例如,(shipcountry,shipcity)在1,2,3,4,7,8和10中显示七次。
如果您为汇总和多维数据集指定了不同的参数,那么您将获得一组完全不同的分组集。
最后,请记住我上面所说的:汇总和立方体都是常用的分组集模式的快捷方式。如果您只想要某些分组集,请仅指定具有分组集子句的那些!