mysql 占比函数_mysql查询——计算占比与累计占比

fa19aed3dd9bb40b3dbbf1f501176544.png 点击上面“蓝字”关注我们! 599e044899510f07cda1926d7ee6a241.png

下表是2020年3月各产品的销量数据表(product_sales),其中包含字段序号Id、产品product、销量Sales,现在需要编写一个查询语句,计算出各产品的销量占比和累计销量占比

d0da0e9bdac38eb4efcab73264a578ef.png

第一步,计算总的产品销量

select sum(sales)as sum_sales from product_sales;

3560f96f0576b03223b8481ef1d6fe36.png

第二步,计算各产品的销量占比

select product,sales,

concat(left(sales/sum_sales*100,5),'%')as pro

from product_sales,

(select sum(sales)as sum_sales from product_sales)s

order by sales desc;

18253e945f0e01e407152cac105946b9.png

第三步,计算各产品的累计销量

select product,sales,

@cum_sales:=@cum_sales+sales as cum_sales

from product_sales,

(select @cum_sales:=0)c

order by sales desc;

a937cdf7e4cb764712066a78047808e7.png

第四步,计算各产品的累计销量占比

select product,sales,

@cum_sales:=@cum_sales+sales as cum_sales,

concat(left(@cum_sales/sum_sales*100,5),'%')as cum_pro

from product_sales,

(select @cum_sales:=0)c,

(select sum(sales) as sum_sales from product_sales)s

order by sales desc;

311ba0938531370e6917e8de15b5c66e.png

第五步,将第一步到第四步连接起来得到最终的查询语句

select product,sales,

#计算各产品销量占比

concat(left(sales/sum_sales*100,5),'%')as pro,

#计算各产品的累计销量

@cum_sales:=@cum_sales+sales as cum_sales,

#计算各产品的累计销量占比

concat(left(@cum_sales/sum_sales*100,5),'%')as cum_pro

from product_sales,

(select @cum_sales:=0)c,

(select sum(sales) as sum_sales from product_sales)s

order by sales desc;

最终结果

ef3d6ccd2b6b8017c18d293471a4cc4f.png

在mysql8.0及以上版本中第二步计算各产品的累计销量也可以通过将聚合函数sum作为窗口函数来实现,因此最终查询语句也可表示为:

select product,sales,

#计算各产品销量占比

concat(left(sales/sum_sales*100,5),'%')as pro,

#计算各产品的累计销量

sum(sales)over(order by sales desc)as cum_sales,

#计算各产品的累计销量占比

concat(left(sum(sales)over(order by sales desc)/sum_sales*100,5),'%')as cum_pro

from product_sales,

(select sum(sales) as sum_sales from product_sales)s

order by sales desc;

68e12f6593dea24f7935f18383e239d3.gif

往期精选:

mysql中数据累加的方法

删除重复的数据

mysql合并连接单元格内容

3b188b7a99d8c26847f63e668733680f.png

36efc66a26d497aa5802580a727c9b2f.gif

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值