首页 > 数据库 >MySQL基础练习题9-平均售价

MySQL基础练习题9-平均售价

时间:2024-07-28 14:28:02浏览次数:16  
标签:练习题 insert product price 2019 MySQL date id 售价

题目·:查找每种产品的平均售价。average_price 应该 四舍五入到小数点后两位。

准备数据

​分析数据

第一步:用左连接连接两张表

​第二步:留下符合日期

第三步:算平均售价

第四步:排除那些售卖为0的这种情况

总结:


题目:查找每种产品的平均售价。average_price 应该 四舍五入到小数点后两位

准备数据

## 创建库
create database db;
use db;

## 创建价格表(prices)
Create table If Not Exists Prices (product_id int, start_date date, end_date date, price int);

## 创建单价表(unitssold)
Create table If Not Exists UnitsSold (product_id int, purchase_date date, units int);

## 向价格表插入数据
Truncate table Prices;
insert into Prices (product_id, start_date, end_date, price) values ('1', '2019-02-17', '2019-02-28', '5');
insert into Prices (product_id, start_date, end_date, price) values ('1', '2019-03-01', '2019-03-22', '20');
insert into Prices (product_id, start_date, end_date, price) values ('2', '2019-02-01', '2019-02-20', '15');
insert into Prices (product_id, start_date, end_date, price) values ('2', '2019-02-21', '2019-03-31', '30');
insert into Prices (product_id, start_date, end_date, price) values ('3', '2019-02-21', '2019-03-31', '30');

## 向单价表插入数据
Truncate table UnitsSold;
insert into UnitsSold (product_id, purchase_date, units) values ('1', '2019-02-25', '100');
insert into UnitsSold (product_id, purchase_date, units) values ('1', '2019-03-01', '15');
insert into UnitsSold (product_id, purchase_date, units) values ('2', '2019-02-10', '200');
insert into UnitsSold (product_id, purchase_date, units) values ('2', '2019-03-22', '30');

 输入:

价格表

单价表

 分析数据

平均售价 = 产品总价 / 销售的产品数量。
产品 1 的平均售价 = ((100 * 5)+(15 * 20) )/ 115 = 6.96
产品 2 的平均售价 = ((200 * 15)+(30 * 30) )/ 230 = 16.96
 第一步:用左连接连接两张表
## 第一步:先将两张表进行左连接
select * from prices p left join unitssold u on p.product_id = u.product_id;
 第二步:留下符合日期
## 第二步:留下符合日期
select * from prices p left join unitssold u on p.product_id = u.product_id
where u.purchase_date between p.start_date and p.end_date ;

 第三步:算平均售价
## 第三步:算平均售价
select p.product_id,round(sum(units * price) / sum(units),2) as average_price
from prices p left join unitssold u on p.product_id = u.product_id
where u.purchase_date between p.start_date and p.end_date
group by p.product_id;

第四步:排除那些售卖为0的这种情况
## 排除那些售卖为0的这种情况
select p.product_id,round(ifnull(sum(units * price) / sum(units),0),2) as average_price
from prices p left join unitssold u on p.product_id = u.product_id
where u.purchase_date between p.start_date and p.end_date or u.product_id is null
group by p.product_id;

总结:

  1. 遇到这种需要两列进行计算,还要排除符合A表而不符合B表,可以进行A表左连接B表。把不符合条件的变成null,最后用ifnull()函数排除null值的列。
  2. 最后结果需要计算,且有小数点。使用ROUND(column_name,decimals),column_name: 要舍入的字段,必需、decimals: 规定要返回的小数位数,可选。

标签:练习题,insert,product,price,2019,MySQL,date,id,售价
From: https://blog.csdn.net/weixin_58305115/article/details/140739199

相关文章

  • Mysql安装教程【实测有效】
     一、查找并卸载原有的mysql数据库1.使用rpm-qa|grepmysql命令查找mysql数据库软件包及依赖包;若没有任何显示则证明没有相关的mysql数据库;若显示了相关的软件包及依赖包,使用 yumremovexxx命令依次删除显示的包;注意:xxx为显示的软件包及依赖包包名;2.使用 find/......
  • mysql 关于幻读
    前言什么是幻读?幻读这个概念产生是因为事物隔离级别可重复读需要解决的一个问题。可重复读,顾名思义,就是一个事物中多次读取的结果是一致的。那其中就包含两个需要解决的问题:虚读:对同一行数据,每次读取的不一致。具体表现为T1读取某一数据后,当T2进行了修改,然后T1再次读该数......
  • Windows版MySQL8.4.2LTS解压直用(下载免安装-绿色-项目打包直接使用-含卸载)
    文章目录下载地址选择GPL选择server选择8.5.2LTS长期服务版配置解压配置环境变量初始化新建my.ini配置root密码安装mysql启动mysql服务使用mysql登陆mysql修改mysql密码设置客户端可连接远程MySQL服务器修改host为值为”%“执行语句:updateusersethost='%'where......
  • (免费领源码)java#ssm#mysql航空机票管理系统27545-计算机毕业设计项目选题推荐
    摘 要随着互联网时代的到来,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个B/S结构的航空机票管理系统,机票系统的管理工作系统化、规范化,也会提高平台形象,提高管理效率。本航空机票管理系统是针对目前航空机票管理系统的实际需求,从实际工作出发,对......
  • 基于python+flask+mysql徐州市天气信息可视化分析系统04600-计算机毕业设计项目选题推
    摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对天气信息等问题,对天气信息进行研究分析,然后开发设计出天气信息可视化分析系统以解决问题。......
  • 【免费领源码】Java/Mysql数据库+SSM校园兼职网站 25557,计算机毕业设计项目推荐上万套
    摘 要当今人类社会已经进入信息全球化和全球信息化、网络化的高速发展阶段。丰富的网络信息已经成为人们工作、生活、学习中不可缺少的一部分。人们正在逐步适应和习惯于网上贸易、网上购物、网上支付、网上服务和网上娱乐等活动,人类的许多社会活动正在向网络化发展。兼职......
  • 【免费领源码】Java/Mysql数据库+springboot驾校预约管理系统 25540,计算机毕业设计项
    摘 要随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于驾校预约管理系统当然也不能排除在外,随着网络技术的不断成熟,带动了驾校预约管理系统,它彻底改变了过去传统的管理方式,不仅使服务管理难度变低了,还提升了管理的灵活性。这种......
  • 如何让SQL Server像MySQL一样拥有慢查询日志(Slow Query Log慢日志)
    如何让SQLServer像MySQL一样拥有慢查询日志(SlowQueryLog慢日志)SQLServer一直以来被人诟病的一个问题是缺少了像MySQL的慢日志功能,程序员和运维无法知道数据库过去历史的慢查询语句。因为SQLServer默认是不捕获过去历史的长时间阻塞的SQL语句,导致大家都认为SQLServer没有历......
  • linux centos7环境下通过rpm部署MySQL
    一、环境准备环境:centos7,确保虚拟机内存足够,不然无法上传数据包和解压mysql包:mysql-8.0.25-1.el7.x86_64.rpm-bundle.tar这个包去MySQL官网可以下载,此链接可以直达:https://downloads.mysql.com/archives/community/二、打开远程连接,连上自己的虚拟机1.连上自己的虚拟机后......
  • mysql基础查询案例(连接查询、时间日期查询、树形表查询、函数查询、日期统计案例)
    一、连接查询图解示意图1、建表语句部门和员工关系表:CREATETABLE`tb_dept`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'主键ID',`deptName`varchar(30)DEFAULTNULLCOMMENT'部门名称',PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=6DEFAU......