mysql - 将 ROLLUP 转换为 CUBE
问题描述
假设我们可以访问GROUP BY ROLLUP
但不能访问(例如,如果我们想象在旧版本中不存在GROUP BY CUBE
,则在 mysql 甚至 postgres中)。CUBE
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 或其他东西来模拟CUBE
具有 N 个变量汇总的函数?如果是这样,如何做到这一点?
解决方案
你可以使用一个过程来生成你的 sqls
您可以尝试以下伪程序
Create procedure Rollup(a, b)
As
Begin
For i in [a, b, c] -- or whatever array you may have
For j! =i
Rollup(i, j)
End loop;
End loop;
END
推荐阅读
- c# - 是否为每个解决方案配置设置了 C# 语言版本?
- ios - OCMock:invokeBlockWithArgs 与 checkWithBlock
- json - SQL脚本中json字符串的计数项(兼容版本100,无openjson)
- ios - 如何将 Set 与 Table View 一起使用?
- powershell - Powershell Microsoft Teams:Add-TeamChannelUser foreach 循环的意外行为
- winapi - 如何使用winapi检查计算机上是否播放了任何音乐?
- firebase - 颤动 | 如何检查文件是否存在于firestore中
- python - 来自特定行的列的 Python 总和值
- c# - 使用 C# 下载电子邮件附件,启用 MFA
- python - .quit 和 .destroy 在 tkinter 上的区别