d41fb6e562a24b2563c96ce5de374ae6.png点击上面“蓝字”关注我们!63699d97f35490c12eba30151c3ea3e9.png

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

869ac30f0ea42259d46896600e2c1a61.png

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

select sum(sales)as sum_sales from product_sales;

4cf82953e14f35fe75586121f930ac00.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;

b6296c5cb5239a175b1020766dd28fa0.png

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

select product,sales,

@cum_sales:=@cum_sales+sales as cum_sales

from product_sales,

(select @cum_sales:=0)c

order by sales desc;

ba7a9f691a7de554ad4d7053165574e0.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;

1ea93b8c888ca3c7debf1b1c3dc96b87.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;

最终结果

ac9ba0bad24ce2d94b263148145065a1.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;

e8134ae3808163685024bde5e8f0027b.gif

往期精选:

mysql中数据累加的方法

删除重复的数据

mysql合并连接单元格内容

7c2ef46776dbcfb5c8f46e2ff9ba0012.png

a3fdf6eb2b45bc8baab1bb0a19143d3d.gif

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐