sql中group by的rollup、Cube 、Sets 用法

Group by

 

基础数据

id

name

ptype

price

Regist_date

 

001

T

衣服

1000

2009-09-20

 

002

打孔器

办公用品

500

2009-09-11

 

003

运动T

衣服

4000

 

 

004

菜刀

厨房用品

3000

2009-09-20

 

005

高压锅

厨房用品

6800

2009-01-15

 

006

叉子

厨房用品

500

2009-09-20

 

007

擦菜板

厨房用品

880

2008-04-28

 

008

圆珠笔

办公用品

100

2009-11-11

 

 

 

select  ptype ,sum(price)  from product group by product_type;

执行结果为;

ptype  sum(price)

衣服    5000

办公用品 600

厨房用品 11180

 

得到合计行(rollup)

select  ptype  ,sum(price)  from product group by  rollup(product_type);

ptype   sum(price)

         16780

衣服     5000

办公用品 600

厨房用品 11180

 

Select ptype,regist_date,sum(price) as sum_price

From product

Group by rollup (ptype,regist_date)

执行结果:

ptype    regist_date     sum_price

 

  

ptype    

regist_date

sum_price

 

 

 

16780

合计

厨房用品

 

11180

厨房用品小计

厨房用品

2008-04-28

880

 

厨房用品

2009-01-15

6800

 

厨房用品

2009-09-20

3500

 

办公用品

 

600

办公用品小计

办公用品

2009-09-11

500

 

办公用品

2009-11-11

100

 

衣服

 

5000

--衣服小计

衣服

2009-09-20

1000

 

衣服

 

4000

日期为空,当做单独行

 

以下两个功能很有意思,用法和 rollup 一样

Cube --用数据来搭积木,根据聚合键的所有可能的组合计算

Sets ---取得期望的积木,取得期望的不固定的结果

 

Sql:

Select case when grouping(ptype) =1

Then ‘商品种类 合计

Else ptype end as ptype,

      case when grouping(regist_date) =1

Then ‘登记日期 合计

Else cast(regist_date as varchar(16)) end as regist_date,

      Sum(price) as sum_price

From  product

Group by cube(ptype,regist_date);

 

执行结果:

ptype

regist_date

sum_price

 

商品种类 合计

登记日期 合计

16780

 

商品种类 合计

2008-04-28

880

 

商品种类 合计

2009-01-15

6800

 

商品种类 合计

2009-09-11

500

 

商品种类 合计

2009-09-20

4500

 

商品种类 合计

2009-11-11

100

 

商品种类 合计

 

4000

 

厨房用品

登记日期 合计

11180

 

厨房用品

2008-04-28

880

 

厨房用品

2009-01-15

6800

 

厨房用品

2009-09-20

3500

 

办公用品

登记日期 合计

600

 

办公用品

2009-09-11

500

 

办公用品

2009-11-11

100

 

衣服

登记日期 合计

5000

 

衣服

2009-09-20

1000

 

衣服

 

4000

 

 

 

Sql:

Select case when grouping(ptype) =1

Then ‘商品种类 合计

Else ptype end as ptype,

      case when grouping(regist_date) =1

Then ‘登记日期 合计

Else cast(regist_date as varchar(16)) end as regist_date,

      Sum(price) as sum_price

From  product

Group by sets(ptype,regist_date);

ptype

regist_date

sum_price

 

商品种类 合计

2008-04-28

880

 

商品种类 合计

2009-01-15

6800

 

商品种类 合计

2009-09-11

500

 

商品种类 合计

2009-09-20

4500

 

商品种类 合计

2009-11-11

100

 

商品种类 合计

 

4000

 

厨房用品

登记日期 合计

11180

 

办公用品

登记日期 合计

600

 

办公用品

2009-09-11

500

 

办公用品

2009-11-11

100

 

衣服

登记日期 合计

5000

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值