点击上面“蓝字”关注我们!

下表是2020年3月各产品的销量数据表(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;

往期精选:

mysql中数据累加的方法

删除重复的数据

mysql合并连接单元格内容

mysql 按时间累计计算_mysql查询——计算占比与累计占比相关推荐

  1. mysql查询特定时间数据视频_mysql查询特定时间段内的数据

    参照文章(mysql查询时间段内数据)进行了操作. 先来建表语句: [sql] view plaincopySETFOREIGN_KEY_CHECKS=0;-- ------------------- ...

  2. mysql查询时间出来数字_mysql查询时间出来数字的解决方法

    mysql查询时间出来数字的解决方法 发布时间:2020-11-16 10:50:29 来源:亿速云 阅读:108 作者:小新 这篇文章将为大家详细讲解有关mysql查询时间出来数字的解决方法,小编觉 ...

  3. mysql基于时间盲注_MYSQL基于时间的盲注详解

    MYSQL基于时间的盲注 联合查询,报错注入,以及布尔盲注,都是基于攻击网站会回显消息,或者将错误信息返回在前端,或者会返回web页面的正确或错误 但是有时候网站关闭了错误回显或过滤了某些关键字,网页 ...

  4. mysql长时间后断开_mysql 长时间没连接了 就会自动断开服务

    这是因为mysql 长时间没连接了 就会自动断开服务. 解决办法 1.首先,下载必须的jar包 dbcp 包,目前版本是1.2.1:http://jakarta.apache.org/commons/ ...

  5. mysql timediff 时间相减_mysql时间相减的问题

    mysql时间相减的问题(bug) 今天看到宁青同学的一条微博,提到MySQL日期相减的错误结果,以前没有怎么注意,于是测试了一下,发现确实很坑爹,很容易踩雷,于是整理博客提醒一下大家. 先看一下错误 ...

  6. mysql空间计算_MySQL 空间计算 空间查询

    一.前言 MySQL实施了OGC建议的具有Geometry类型的SQL环境的一个子集.该术语指的是用一组集合类型扩展的环境.具有几何值的SQL列是作为拥有集合类型的列实施的.该规范描述了SQL几何类型 ...

  7. mysql 经纬度距离 自定义函数_mysql 经纬度计算距离 自定义函数

    这些经纬线是怎样定出来的呢? 地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的假想线),在地球中腰画一个与地轴垂直的大圆圈,使圈上的每一点都和南北两极的距离相等,这个圆圈就叫作&quo ...

  8. mysql 前n个最大值_MySQL varchar计算:求列的数目和计算N的最大值

    MySQL varchar计算:求列的数目和计算N的最大值 有道面试题:若一张表中只有一个字段VARCHAR(N)类型,utf8编码,则N最大值为多少? 先明白计算的一些规则限制 ① 存储限制 需要额 ...

  9. mysql 单精度和双经度_mysql 下 计算 两点 经纬度 之间的距离 计算结果排序

    根据经纬度计算距离公式 公式 对上面的公式解释如下: Lung1 Lat1表示A点经纬度, Lung2 Lat2表示B点经纬度: a=Lat1 – Lat2 为两点纬度之差 b=Lung1 -Lung ...

最新文章

  1. 【实战经验分享】一劳永逸的解决网线随意热插拔问题
  2. “std::invoke”: 未找到匹配的重载函数
  3. 机器人动力学方程的性质
  4. VB中判断空的几种方法,Null, Missing, Empty, Nothing, vbNullString区别
  5. SpringBatch读文件(FlatFileItemReader)写据库(MyBatisBatchItemWriter)(四)
  6. Kyoya and Photobooks
  7. 什么是计算机独立显卡,独立显卡是什么
  8. ifamre 大小随页面变_SEO优化中如何让你的页面访问速度更快
  9. 菜鸟学Struts2——Interceptors
  10. 键盘上各种特殊符号的英文读法
  11. C#中如何跨窗体传值
  12. python 提取代码中的所有汉字
  13. 树莓派输出PWM波驱动舵机
  14. java shiro原理_Shiro的原理及Web搭建
  15. C语言求阶乘尾数零的个数
  16. 以树之名,诉春之情--F1503005班团改金
  17. python实现excel计算_用python实现简单EXCEL数据统计的实例
  18. win10查看电池损耗
  19. android 9 qq登录,【报Bug】安卓离线打包targetSdkVersion设置28时,在安卓9.0手机上QQ授权登录闪退...
  20. 转: Windows句柄数的限制

热门文章

  1. wps linux 无法输入中文,WPS for linux 中不能切换到中文输入法
  2. php mysql多线程处理数据6_PHP WIN MYSQL Rdeis 下多进程处理产品数据测试 31 万条 6 进程...
  3. 养生之道---六字气决
  4. Unity3D教程:简单的碰撞检测
  5. 提分必练,中创教育PMP全真模拟题分享来喽
  6. C# WinRar 解压缩
  7. opengl android 纹理贴图 代码,Android 使用opengl es的纹理贴图白屏问题请教。
  8. php获取用户和服务器ip及其地理位置详解
  9. 2--STM32+USB移植+HID 与AUDIO类MIDI设备组成的复合设备
  10. 香港十大炒黄金交易公司排名2020版一览