了解SQL中的ROLLUP

Nib*_*Pig 9 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
Run Code Online (Sandbox Code Playgroud)

然后这是我做的查询:

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

group by store, [type]

with rollup
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Ron*_*erg 14

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

(A, B, C)
(A, B)
(A)
()
Run Code Online (Sandbox Code Playgroud)

所以你看到订单很重要,正如你已经发现的那样.如果按A,C,B,你会得到以下分组,而不是:

(A, C, B)
(A, C)
(A)
()
Run Code Online (Sandbox Code Playgroud)