MySQL汇总排序查询

2022-01-07 08:25:30 浏览数 (3)

问题

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

要求①实现一

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

代码语言:javascript复制
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进行汇总

代码语言:javascript复制
SELECT COALESCE ( `店铺名称`, '汇总' ) AS 店铺,
round(sum(交易金额),2) AS 销售总额 
FROM test
GROUP BY `店铺名称` WITH ROLLUP 
ORDER BY 销售总额 DESC  

要求②实现一

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

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

要求②实现二

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

代码语言:javascript复制
(select `店铺名称` ,round(sum(交易金额),2) AS 销售总额 
from  test  group by `店铺名称` 
order by 销售总额 desc) 
union 
(select '汇总',round(sum(交易金额),2) AS 销售总额 
from  test)

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

0 人点赞