MySQL汇总排序查询

问题

在这里插入图片描述

两个要求:
①计算出来的字段销售总额保留两位小数;
②排序时,汇总不参与排序,放在最下面。

要求①实现一

case when 加汇总,但是orderby排序对所有行排序,汇总的销售金额最大一直在最上面

SELECT case when grouping(店铺名称)=1 then "汇总" else 店铺名称 end 店铺名称,
round(sum(交易金额),2) as 销售额求和 
FROM test
group by 店铺名称 with rollup 
order by 销售额求和 desc ;

要求①实现二

COALESCE 加汇总,作用类似于方案一中的case when,、都是使用with rollup进行汇总

SELECT COALESCE ( `店铺名称`, '汇总' ) AS 店铺,
round(sum(交易金额),2) AS 销售总额 
FROM test
GROUP BY `店铺名称` WITH ROLLUP 
ORDER BY 销售总额 DESC  

要求②实现一

if 相当于用条件判断添加了一列隐藏列,order by先对店铺进行排序再对销售额排序,这样汇总行就跑最下面去了,因为汇总行的索引为1,其他店铺名称的索引都是0

SELECT COALESCE ( `店铺名称`, '汇总' ) AS 店铺,
round(sum(交易金额),2) AS 销售总额 
FROM test
GROUP BY `店铺名称` WITH ROLLUP 
ORDER BY if (店铺 = '汇总',1,0),销售总额 DESC  

要求②实现二

Sql1 union sql2
union 相当于追加查询,把两个查询结果拼接再一起

(select `店铺名称` ,round(sum(交易金额),2) AS 销售总额 
from  test  group by `店铺名称` 
order by 销售总额 desc) 
union 
(select '汇总',round(sum(交易金额),2) AS 销售总额 
from  test)

友情链接:Mysql 数据分组&条件排序

猜你喜欢

转载自blog.csdn.net/qq_35866846/article/details/111320761