【发布时间】:2015-12-24 09:54:16
【问题描述】:
今天我阅读了关于在 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),结果集也将是相同的。有什么意义?
【问题讨论】:
标签: sql-server tsql group-by