[Mysql] GROUP BY (WITH ROLLUP)& ORDER BY (IF)数据分组&条件排序
Mysql中 GROUP BY & ORDER BY 组合一起使用,先分组,再在分组统计的基础上作相同计算,同时对销售额进行降序排列,总行不参与排序,其中就涉及到了条件排序。
业务场景:
针对大量的销售明细,必要时,需要我们整理简化,直接调用出汇总数据,方便查看。
例如:我们要看每个门店总的销售数据,同时添加总行,并且销售额按照降序排列。由图1的销售明细汇总成图2。
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函数定义将该空值定义为了"汇总"。
④ORDER BY 和IF配合使用,
上图可以看出按照销售额降序排,仅使用ORDER BY DESC,汇总行其实也参与了排序,这里我们要配合if一起使用,对汇总项附加隐藏属性,不参与排序。
参考链接:https://www.cnblogs.com/xiaoshen666/p/11004983.html
很实用的SQL查询汇总方式,欢迎互相交流~