问题
两个要求: ①计算出来的字段销售总额保留两位小数; ②排序时,汇总不参与排序,放在最下面。
要求①实现一
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 数据分组&条件排序