SQL语句(union all和rollup)汇总各个省份和全国销售额

考虑一个常见的业务场景:某零售商想要分析每月各个省份和全国下各品牌的销售情况。

例如,sales 表格如下:

从上述表格中,我们可以看到包装水品类各品牌包含的商品每月在各个省份各个渠道的销量和销售额信息。

现在我们分别使用SQL union all 和rollup两种方法来计算每月各个省份和全国下各品牌对应的销售额和销量。 

方法一:union all

  --方法一

    --1.先分组聚合每月各个省份的品牌销量和销售额

    select  MONTH
       ,province_name
       ,brand_name
       ,sum(quantity) quantity
       ,sum(amount) amount
    from sales 
    GROUP BY MONTH
        ,province_name
        ,brand_name

    union all 

    -- 2.分组聚合每月全国的品牌销量和销售额

    select  MONTH
       ,'全国' as province_name
       , brand_name
       ,sum(quantity) quantity
       ,sum(amount) amount
    from sales 
    GROUP BY MONTH
        ,brand_name ;

在上述SQL中,我们使用sum函数分别分组聚合计算各省份品牌销量和销售额(注释1),又分组聚合计算了每月全国品牌的销量和销售额数据(注释2),然后用union all将两部分合并输出。

SQL运行后,数据如下:

方法二:rollup()

我们还可以使用rollup()函数同时计算出每月各省份和全国的品牌销量和销售额数据,SQL如下图所示,rollup()函数汇总出来全国数据province_name字段默认为空值,这里我们使用if语句判断一下,给定一个“全国”值。

--方法二
--1.rollup()同时每月各个省份和全国的品牌销量和销售额
    select  MONTH
       ,if(province_name is null,'全国',province_name) province_name --if语句判断一下全国
       ,brand_name
       ,sum(quantity) quantity
       ,sum(amount) amount
    from sales 
    GROUP BY MONTH
        ,rollup(province_name)
        ,brand_name
     ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值