MySQL 以group by 进行rollup

MySQL 4.1.1 与后续的版本支持WITH ROLLUP修饰符(modifier),可以统计输出的集合字段。
查找每年的葡萄酒销售总额:

SELECT year,sum(price) FROM wine 
    INNER JOIN items ON wine.id = items.wine_id
    GROUP BY year; 

部分查询结果:

year     sum(price)
1980     2056.12
1981     16234.78
...
2007     18000.12
2008     20183.34

若在查询中加上WITH ROLLUP

SELECT year,sum(price) FROM wine 
    INNER JOIN items ON wine.id = items.wine_id
    GROUP BY year
    WITH ROLLUP; 

查询结果会多一行记录:

year     sum(price)
1980     2056.12
1981     16234.78
...
2007     18000.12
2008     20183.34
NULL     5893233.21

多出的这一行,年份显示null,sum(price)是销售额的总计,如此处理便可省去如下代码的运行:

SELECT sum(price) FROM wine 
    INNER JOIN items ON wine.id = items.wine_id;

找出每种葡萄酒的销售总额:
在查找过程中,加入了产酒区(region)、酒厂表(winery),便可使用WITH ROLLUP 取得各个酒厂与产酒区的销售金额
关键:在GROUP BY子句中使用region与winery表的唯一值。

SELECT region_name,winery_name,wine_id,sum(price) FROM region
    INNER JOIN winey ON region.id = winery.region_id
    INNER JOIN wine ON wine.winery_id = winery.id 
    INNER JOIN items ON wine.id = items.wine_id
    GROUP BY region_name,winery_name,wine.id
    WITH ROLLUP; 

部分查询结果:

region_name  winery_name     wine_id    sum(price) 
barissa      anderson wines  112        682.3
barissa      anderson wines  113        732.4
barissa      anderson wines  114        1123.3
barissa      anderson wines  115        68.1
barissa      anderson wines  NULL       2001.8
...
barissa      NULL            NULL       698403.5
...
NULL         NULL            NULL       4287403.6

第六行显示anderson wines酒厂的总销售额(前五行的和),同样其他酒厂的总销售额都会列在该酒厂数据的后面,barissa地区的所有酒厂查询完毕后,barissa地区的总金额会出现在winery_name 和wine_id均为null的那一行,最后一行,是所有的地区、酒厂、酒品种销售额的总和。

WITH ROLLUP特点:

  1. ORDER BY 子句不能和WITH ROLLUP 同时使用;
  2. 输出产生后才会运用LIMIT子句,所以总会包含总计是NULL的数据行。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值