【发布时间】:2021-12-18 03:44:51
【问题描述】:
假设我们可以访问GROUP BY ROLLUP,但不能访问GROUP BY CUBE(例如,如果我们认为CUBE 在旧版本中不存在,则在mysql 甚至postgres 中)。
下面是ROLLUP和CUBE的区别:
ROLLUP (a, b, c)
(a, b, c)
(a, b)
(a)
()
CUBE (a, b, c)
(a, b, c)
(a, b)
(a, c)
(a)
(b, c)
(b)
(c)
()
如果CUBE 不是一个选项,那么将ROLLUP 函数映射为CUBE 的正确方法是什么?好像是:
ROLLUP (a,b,c) UNION ALL
ROLLUP (a, c) UNION ALL
ROLLUP ( b,c) UNION ALL
ROLLUP ( c)
这是正确的理解吗?如果是这样,是否可以使用递归 CTE 或其他东西来模拟带有 N 个变量汇总的 CUBE 函数?如果是这样,如何做到这一点?
【问题讨论】:
-
rollup(a,b,c)和rollup(a,c)都将生成group by a并且所有汇总都将生成总计。看起来递归 CTE 是可能的选项,但目前我无法编写这样的查询
标签: mysql sql postgresql