首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将ROLLUP转换为CUBE

将ROLLUP转换为CUBE
EN

Stack Overflow用户
提问于 2021-11-03 18:55:19
回答 1查看 24关注 0票数 1

假设我们可以访问GROUP BY ROLLUP,但不能访问GROUP BY CUBE (例如,在mysql中,甚至在postgres中,如果我们想象CUBE在旧版本中不存在)。

下面显示了ROLLUPCUBE之间的区别

代码语言:javascript
复制
ROLLUP (a, b, c)
(a, b, c)
(a, b)
(a)
()
代码语言:javascript
复制
CUBE (a, b, c)
(a, b, c)
(a, b)
(a, c)
(a)
(b, c)
(b)
(c)
()

如果CUBE不是一个选项,那么将ROLLUP函数映射为CUBE的正确方法是什么?看起来应该是:

代码语言:javascript
复制
ROLLUP (a,b,c) UNION ALL
ROLLUP (a,  c) UNION ALL
ROLLUP (  b,c) UNION ALL
ROLLUP (    c)

这是正确的理解吗?如果是这样,是否可以使用递归CTE或其他方法来模拟具有N个变量的rollup的CUBE函数?如果是这样的话,如何做到这一点呢?

EN

回答 1

Stack Overflow用户

发布于 2021-11-03 19:24:35

您可以使用一个过程来生成sql。

您可以尝试一个过程,如下所示的伪

代码语言:javascript
复制
   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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69830330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档