下面是一张【商品售出的明细表 tb_goods_sale_detail】,表字段解释如下:
目前表中有6条数据,如下图,我们利用
GROUP BY WITH ROLLUP
进行统计汇总商品的【售出总数】和【营销额】
sql如下:
SELECT
a.goods_name,
count( * ) AS "售出数量",
sum( a.price ) AS "营销额"
`tb_goods_sale_detail` a
GROUP BY
a.goods_name WITH ROLLUP;
输出结果如下:
我们发现最后汇总行少了名称,我们利用
COALESCE
做一个优化
SELECT COALESCE
( aa.goods_name, '汇总' ) AS "商品名称",
aa.售出数量,
aa.营销额
SELECT
a.goods_name,
count( * ) AS "售出数量",
sum( a.price ) AS "营销额"
`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.康师傅营销额
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 ) ) 康师傅营销额
tb_goods_sale_detail a
GROUP BY
DATE_FORMAT( a.sale_date, '%Y%m%d' ) WITH ROLLUP
) aa;
输出结果如下:
举例一:下面是一张【商品的售出情况汇总表】 ,表字段解释如下:目前表中有三条数据,我们利用GROUP BYWITH 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..
每天一早到公司,第一件事就是打开各种报
表
,查看平台运
行
情况。到了周末,睡完懒觉还是得爬起床远程回公司看报
表
数据
。于是在周末的时候,将娃哄睡之后,开始着手写一下
统计
sql
,定期执
行
后将结果
汇总
推送到企业微信。
问题就出现在“
汇总
”这个事。众所周知
sql
的
group
by 能
做
分组
统计
,但是分组后还得再执
行
一次
sql
将结果
汇总
一遍,才能将分组
统计
结果加起来。如下面的
SQL
:
select status, count(1)
from action_history
where create_
文章目录1. 分组
查询
介绍2.
group
by的使用根据gender字段来分组根据age字段分组、with
rollup
的初步使用根据name和gender多个字段进
行
分组3.
group
by +
group
_concat()的使用4.
group
by + 聚合
函数
的使用5.
group
by + having的使用6.
group
by + with
rollup
的使用7. 小结
1. 分...
汇总
数据
有时对
数据
表
的操作不是
表
中
数据
本身,而是
表
中
数据
的
汇总
,例如 某一列
数据
的平均值,最大值,最小值等。而对于这些常用的
数据
汇总
处理,
MySQL
提供了
函数
来处理。
SQL
聚集
函数
启动
数据库
:\> net start
mysql
连接
数据库
:\>
mysql
-h127.0.0.1 -uroot -p123456
断开连接:\> exit;或者quit;
停止服务:\> net stop
mysql
创建
数据库
:\> create database db_admin;
查看所有
数据库
:\&g
WITH
ROLLUP
:WITH POLLUP关键字用来在所有记录的最后加上一条记录,这条记录是上面所有记录的总和,即
统计
记录数量。也就是在
group
分组字段的基础上再进
行
统计
数据
。
使用:
GROUP
BY 分组与 WITH
ROLLUP
使用
在
MySQL
中,
GROUP
BY 是分组聚合
函数
,用于将
数据
按照某个列分组,然后对每个分组进
行
聚合计算。而 WITH
ROLLUP
则是一个扩展语法,它可以对
GROUP
BY 的结果集进
行
汇总
计算。
具体来说,
GROUP
BY 可以将
数据
按照指定列分组,然后对每个分组进
行
聚合计算,比如
求和
、平均值等。而 WITH
ROLLUP
则可以在
GROUP
BY 的基础上,对每个分组的聚合结果进
行
汇总
计算,得到一个总计
行
。
举个例子,假设有一个订单
表
,包含订单号、客户、商品、数量和金额等字段。现在我们想要按照客户分组,
统计
每个客户的订单数和订单总金额,并且还要在结果集中添加一
行
总计。我们可以使用如下
SQL
语句:
SELECT 客户, COUNT(订单号) AS 订单数, SUM(金额) AS 订单总金额
FROM 订单
表
GROUP
BY 客户 WITH
ROLLUP
;
这样,
查询
结果就会返回每个客户的订单数和订单总金额,以及总计
行
,其中客户列为空
表
示总计
行
。
总之,
GROUP
BY 和 WITH
ROLLUP
都是用于聚合计算的语法,但
GROUP
BY 是必须的,而 WITH
ROLLUP
则是可选的,用于对
GROUP
BY 的结果集进
行
汇总
计算。