Mysql表数据如何增加汇总统计行(GROUP BY WITH ROLLUP函数用法)

举例一:

下面是一张【商品的售出情况汇总表 tb_goods_sale】 ,表字段解释如下:

目前表中有3条数据,如下图,我们利用GROUP BY WITH ROLLUP 进行统计汇总商品的【售出总数】和【营销额】

sql如下:

SELECT
	a.goods_name,
	sum( saled_count ) AS "售出数量",
	sum( a.saled_count * a.unit_price ) AS "营销额" 
FROM
	`tb_goods_sale` a 
GROUP BY
	a.goods_name WITH ROLLUP;

输出结果:

我们发现最后汇总行少了名称,我们利用COALESCE做一个优化

SELECT COALESCE
	( aa.goods_name, '汇总' ) AS "商品名称",
	aa.售出数量,
	aa.营销额 
FROM
	(
SELECT
	a.goods_name,
	sum( saled_count ) AS "售出数量",
	sum( a.saled_count * a.unit_price ) AS "营销额" 
FROM
	`tb_goods_sale` a 
GROUP BY
	a.goods_name WITH ROLLUP 
	) aa;

输出结果如下:

举例二:

下面是一张【商品售出的明细表 tb_goods_sale_detail】,表字段解释如下:

 目前表中有6条数据,如下图,我们利用GROUP BY WITH ROLLUP 进行统计汇总商品的【售出总数】和【营销额】

 sql如下:

SELECT
	a.goods_name,
	count( * ) AS "售出数量",
	sum( a.price ) AS "营销额" 
FROM
	`tb_goods_sale_detail` a 
GROUP BY
	a.goods_name WITH ROLLUP;

输出结果如下:

 我们发现最后汇总行少了名称,我们利用COALESCE做一个优化

SELECT COALESCE
	( aa.goods_name, '汇总' ) AS "商品名称",
	aa.售出数量,
	aa.营销额 
FROM
	(
SELECT
	a.goods_name,
	count( * ) AS "售出数量",
	sum( a.price ) AS "营销额" 
FROM
	`tb_goods_sale_detail` a 
GROUP BY
	a.goods_name WITH ROLLUP 
	) aa;

输出结果如下:

举例三:

在举例二【商品售出的明细表 tb_goods_sale_detail】的基础上,我们再按销售日期进行统计,为了展示效果,我在表里造了其它日期的销售数据。

我们可以利用GROUP BY WITH ROLLUP 统计出各商品每天的【售出总数】和【营销额】。

 sql如下:

SELECT COALESCE
	( aa.日期, '合计' ) 日期,
	aa.销售总数,
	aa.可乐,
	aa.薯片,
	aa.康师傅,
	aa.总营销额,
	aa.可乐营销额,
	aa.薯片营销额,
	aa.康师傅营销额 
FROM
	(
SELECT
	DATE_FORMAT( a.sale_date, '%Y%m%d' ) 日期,
	COUNT( * ) 销售总数,
	COUNT( IF ( a.goods_name = '可乐', a.goods_name, NULL ) ) 可乐,
	COUNT( IF ( a.goods_name = '薯片', a.goods_name, NULL ) ) 薯片,
	COUNT( IF ( a.goods_name = '康师傅', a.goods_name, NULL ) ) 康师傅,
	SUM( a.price ) 总营销额,
	SUM( IF ( a.goods_name = '可乐', a.price, NULL ) ) 可乐营销额,
	SUM( IF ( a.goods_name = '薯片', a.price, NULL ) ) 薯片营销额,
	SUM( IF ( a.goods_name = '康师傅', a.price, NULL ) ) 康师傅营销额 
FROM
	tb_goods_sale_detail a 
GROUP BY
	DATE_FORMAT( a.sale_date, '%Y%m%d' ) WITH ROLLUP 
	) aa;

输出结果如下:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值