【问题标题】:Understanding ROLLUP in SQL了解 SQL 中的 ROLLUP
【发布时间】:2010-07-01 09:13:09
【问题描述】:

我发现 CUBE 只是生成所有排列,但我在使用 ROLLUP 时遇到了问题。在网上或我正在阅读的书中似乎没有任何好的资源可以为像我这样苦苦挣扎的人解释 SQL。

我的书说 ROLLUP 是 CUBE 运算符的一个特例,它排除了结果中不遵循层次结构的所有情况。

我不完全确定这意味着什么,但在我制作的桌子上运行它会产生一些有用的结果。

我从谷歌的另一个页面制作了一个表格,如下所示:

Type        Store       Number
Dog     Miami       12
Cat     Miami       18
Turtle   Tampa       4
Dog     Tampa       14
Cat     Naples      9
Dog     Naples      5
Turtle   Naples      1

然后这是我提出的查询:

select store,[type], SUM(number) as Number from pets

group by store, [type]

with rollup

这显示了每个商店中每种宠物的数量,以及每个商店中的宠物总数,这有点酷。如果我想查看基于宠物的查询,我发现我必须按顺序切换组,所以类型是第一位的。

那么rollup是基于第一个group by子句的吗?

另一个问题是,我读到您使用 ROLLUP 而不是 CUBE,当您有一个年份和月份列来阻止它在多个年份中聚合同一月份时。我想我明白这意味着什么,但有人可以澄清一下吗?以及如何设置它?

您也可以使用 ROLLUP 来排除其他列组合吗?我上面的表格很简单,查询显示“宠物店”,但如果还有其他列,您可以在结果中包含/排除它们吗?

【问题讨论】:

    标签: sql


    【解决方案1】:

    最好通过一个例子来解释。假设您按ABC 分组。然后,您会通过汇总获得以下分组:

    (A, B, C)
    (A, B)
    (A)
    ()
    

    所以您发现顺序很重要,正如您已经发现的那样。如果您按ACB 分组,则会得到以下分组:

    (A, C, B)
    (A, C)
    (A)
    ()
    

    【讨论】:

    • 哦,哇,这使它更容易理解!希望他们只是把它放在教科书中。谢谢。
    • 当然,我一直在等待使用汇总排除其他列组合的答案,但实际上我通过分组集找到了答案,所以是的。你应该写教科书,因为仅你的前半部分答案就比我的教科书和大量的谷歌搜索更能告诉我!
    猜你喜欢
    • 2011-10-26
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 2017-07-09
    • 2014-03-06
    • 2013-11-11
    相关资源
    最近更新 更多