SQL学习笔记——grouping运算符

我最近看了MICK的两本SQL教程,分别是《SQL基础教程》与《SQL进阶教程》,教材内容深入浅出,非常值得学习。

 

仅Oracle、SQL Server、DB2支持grouping

 

grouping运算符有三类:

rollup、cube、grouping sets

使用方式/书写格式为 group by rollup/cube/grouping sets

 

三者的区别在于:

rollup返回总体合计、第1个分组字段的小计、第2个字段的小计……第(n-1)个字段的小计、第n个字段的详细信息

cube返回总体合计、所有分组字段的小计、第n个字段的详细信息

grouping sets返回所有分组字段的小计

 

这三类运算符都可以与grouping搭配使用(判断是否为聚合记录,是返回1,不是返回0)

 

举例

例子来自于[日]MICK的《SQL进阶教程》

 

数据集

Id

name

cat

price

date

商品编号

商品名称

商品分类

销售单价

登记日期

1

T

衣服

1000

2009/9/20

2

打孔器

办公用品

500

2009/9/11

3

运动T恤

衣服

4000

 

4

菜刀

厨房用具

3000

2009/9/20

5

高压锅

厨房用具

6800

2009/1/15

6

叉子

厨房用具

500

2009/9/20

7

擦菜板

厨房用具

880

2009/4/28

8

圆珠笔

办公用品

100

2009/11/11

 

group by(cat, date)

cat

date

Sum(price)

办公用品

9月11日

500

办公用品

11月11日

100

厨房用具

1月15日

6800

厨房用具

4月28日

880

厨房用具

9月20日

3500

衣服

(空白)

4000

衣服

9月20日

1000

 

group by rollup(cat, date)

cat

date

Sum(price)

商品种类合计

登记日期合计

16780

办公用品

登记日期合计

600

办公用品

9月11日

500

办公用品

11月11日

100

厨房用具

登记日期合计

11180

厨房用具

1月15日

6800

厨房用具

4月28日

880

厨房用具

9月20日

3500

衣服

登记日期合计

5000

衣服

(空白)

4000

衣服

9月20日

1000

 

group by cube(cat, date)

cat

date

Sum(price)

商品种类合计

登记日期合计

16780

商品种类合计

(空白)

4000

商品种类合计

1月15日

6800

商品种类合计

4月28日

880

商品种类合计

9月11日

500

商品种类合计

9月20日

4500

商品种类合计

11月11日

100

办公用品

登记日期合计

600

厨房用具

登记日期合计

11180

衣服

登记日期合计

5000

办公用品

9月11日

500

办公用品

11月11日

100

厨房用具

1月15日

6800

厨房用具

4月28日

880

厨房用具

9月20日

3500

衣服

(空白)

4000

衣服

9月20日

1000

 

group by grouping sets(cat, date)

cat

date

Sum(price)

商品种类合计

(空白)

4000

商品种类合计

1月15日

6800

商品种类合计

4月28日

880

商品种类合计

9月11日

500

商品种类合计

9月20日

4500

商品种类合计

11月11日

100

办公用品

登记日期合计

600

厨房用具

登记日期合计

11180

衣服

登记日期合计

5000

 

你可能感兴趣的:(SQL)