了解SQL中的ROLLUP

时间:2010-07-01 09:13:09

标签: sql

我已经发现CUBE只是生成了所有的排列,但是我在使用ROLLUP时遇到了麻烦。似乎没有任何好的在线资源或我正在阅读的书中为那些像我这样挣扎的人解释SQL。

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

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

我在google上的另一个页面上创建了一个表格,如下所示:

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

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

基于第一个group by子句的汇总是什么?

另一个问题是,我读到你使用ROLLUP而不是CUBE,当你有一年和一个月的专栏来阻止它在多年内汇总同一个月。我想我明白这意味着什么,但任何人都可以澄清一下吗?你怎么设置它?

您是否可以使用ROLLUP排除其他列组合?我上面的表非常简单,查询显示“按商店划分的宠物”,但如果有其他列,您可以在结果中包含/排除它们吗?

1 个答案:

答案 0 :(得分:14)

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

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

所以你看到订单很重要,正如你已经发现的那样。如果您按ACB进行分组,则会获得以下分组:

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