mysql rollup 分组_[Mysql] GROUP BY (WITH ROLLUP)& ORDER BY (IF)数据分组&条件排序

这篇博客介绍了如何在MySQL中结合GROUP BY (WITH ROLLUP)和ORDER BY (IF)进行数据分组和条件排序。通过示例展示了如何从销售明细数据中获取门店汇总数据,同时添加总行并按销售额降序排列,避免汇总行参与排序。文章详细解释了GROUP BY、WITH ROLLUP、ORDER BY、COALESCE函数和IF语句的使用方法。
摘要由CSDN通过智能技术生成

[Mysql] GROUP BY (WITH ROLLUP)& ORDER BY (IF)数据分组&条件排序

Mysql中 GROUP BY & ORDER BY 组合一起使用,先分组,再在分组统计的基础上作相同计算,同时对销售额进行降序排列,总行不参与排序,其中就涉及到了条件排序。

业务场景:

针对大量的销售明细,必要时,需要我们整理简化,直接调用出汇总数据,方便查看。

例如:我们要看每个门店总的销售数据,同时添加总行,并且销售额按照降序排列。由图1的销售明细汇总成图2。

?i=20201215190743132.png#pic_center

?i=20201215190715349.png#pic_center

Mysql的查询语句如下:

SELECT COALESCE

( `门店名称`, '汇总' ) AS 门店,

round( sum( `销售额` ), 2 ) AS 销售总额

FROM

`store sales`

GROUP BY

`门店名称` WITH ROLLUP

ORDER BY

IF

(门店= '汇总', 0, 1 ) DESC,销售总额 DESC

相关知识点:

① GROUP BY 将数据表按字段进行分组。

WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的计算,比如(SUM,AVG,COUNT…)。

②ORDER BY ASC/DESC 将查询数据排序后再返回数据。

③COALESCE是一个函数,COALESCE (expression_1, expression_2, …,expression_n)遇到非null值即停止并返回该值。

我们使用WITH ROLLUP在分组的基础上对所有的数据进行了求和,可以看到汇总行门店名称字段为空值,所以用了COALESCE函数定义将该空值定义为了"汇总"。

?i=20201215193829935.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NzMxMzIwMQ==,size_16,color_FFFFFF,t_70#pic_center

④ORDER BY 和IF配合使用,

上图可以看出按照销售额降序排,仅使用ORDER BY DESC,汇总行其实也参与了排序,这里我们要配合if一起使用,对汇总项附加隐藏属性,不参与排序。

参考链接:https://www.cnblogs.com/xiaoshen666/p/11004983.html

很实用的SQL查询汇总方式,欢迎互相交流~

标签:GROUP,汇总,ROLLUP,分组,Mysql,排序,ORDER

来源: https://blog.csdn.net/weixin_47313201/article/details/111233880

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值