Mysql的常用语句

2021/10/11 19:16:19

本文主要是介绍Mysql的常用语句,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一.mysql查询——计算占比与累计占比

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

 

 

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

select sum(sales)as sum_sales from product_sales;

 

 

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

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;

 

 

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

select product,sales,

@cum_sales:=@cum_sales+sales as cum_sales

from product_sales,

(select @cum_sales:=0)c

order by sales desc;

 

 

 

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

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;

 

 

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

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;

 

 

在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;

二:sql语句 如何分组后得到记录总数

SELECT COUNT(*)
FROM (SELECT 分组字段 FROM 表
GROUP BY 分组字段
)别名


或者


SELECT COUNT(*)
FROM (SELECT distinct 分组字段 FROM 表)别名



这篇关于Mysql的常用语句的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程