MySQL练习题

sql文件:

链接:https://pan.baidu.com/s/1q3mT9KUZt162XtoIMXspXg 
提取码:0lym

sql:

-- 1.请查询2020年全年总销售额前5的门店id,门店名称,总销售额。以降序形式排列(20分)查询结果字段表示为:id,门店名称,总金额。
SELECT a.门店id,a.`门店名称`,SUM(a.`销售额`) 销售额 FROM 
(SELECT shop.id 门店id,shop.`name` 门店名称,SUM(h.totalprice) 销售额 
FROM goods 
LEFT JOIN booth ON goods.booth_id = booth.id 
LEFT JOIN historytrade h ON h.goods_id = goods.id 
LEFT JOIN shop ON shop.id = booth.shop_id
WHERE YEAR(DATE_FORMAT(h.tradetime,"%Y%m%d"))=2020 GROUP BY h.goods_id) a
GROUP BY a.`门店id`
ORDER BY 销售额 DESC
LIMIT 5;
-- 2.查询店名为“清河店”的门店,2019年销售商品的总重量
SELECT SUM(total.countGood) 总量 FROM
(SELECT goods.id,COUNT(goods_id) countGood FROM shop LEFT JOIN booth ON
shop.id = booth.shop_id LEFT JOIN goods ON
goods.booth_id = booth.id LEFT JOIN historytrade h ON
h.goods_id = goods.id 
WHERE YEAR(DATE_FORMAT(h.tradetime,"%Y%m%d"))=2019
AND
shop.`name` LIKE "清河店%"
GROUP BY goods.id) total;
-- 3.查询店名为“南苑店”在2020年的农残检查的合格率,(1为合格)合格率的定义为检测合格的次数除以检测的总次数
SELECT 
SUM((CASE WHEN r.checking = 1 THEN 1 ELSE 0 END))/COUNT(r.id)*100 合格率
FROM shop LEFT JOIN booth ON
shop.id = booth.shop_id LEFT JOIN remain r ON
r.booth_id = booth.id
WHERE YEAR(DATE_FORMAT(r.check_time,"%Y%m%d"))=2020
AND
shop.name LIKE "南苑店%";
-- 4.查询“南苑店”中销售额比“洋洋水果”高的商户名称和销售额,并以销售额升序进行排列。查询结果字段展示为:商户名称,销售额
SELECT * FROM (SELECT booth.booth_name 商户名称,SUM(h.totalprice) 销售额 FROM shop LEFT JOIN booth ON
shop.id = booth.shop_id LEFT JOIN goods ON
goods.booth_id = booth.id LEFT JOIN historytrade h ON
h.goods_id = goods.id
WHERE 
shop.`name` LIKE "南苑店%"
GROUP BY 商户名称) a WHERE
a.`销售额`>
(SELECT SUM(h.totalprice) FROM shop LEFT JOIN booth ON
shop.id = booth.shop_id LEFT JOIN goods ON
goods.booth_id = booth.id LEFT JOIN historytrade h ON
h.goods_id = goods.id
WHERE 
shop.`name` LIKE "南苑店%" AND booth.booth_name = "洋洋水果")
ORDER BY a.`销售额`
;
-- 5.查询所有名字中含有“白菜”两字的商品在2019年销售额的总合,以门店名称进行归类。查询结果字段表示为:门店名称,商品名称,销售额
SELECT shop.`name` 门店名称,goods.goods_name 商品名称,SUM(h.totalprice) 销售额 FROM goods LEFT JOIN booth ON
goods.booth_id = booth.id LEFT JOIN historytrade h ON
h.goods_id = goods.id LEFT JOIN shop ON
shop.id = booth.shop_id
WHERE YEAR(DATE_FORMAT(h.tradetime,"%Y%m%d"))=2019
AND
goods.goods_name LIKE "%白%菜%" 
GROUP BY h.goods_id;
-- 6.查询“南苑店”中所有商品的名称及当前价格。(10分)查询字段结果表示为:商品名,价格。
SELECT goods.goods_name 商品名称,goods.unitprice 价格 FROM shop LEFT JOIN booth ON
shop.id = booth.shop_id LEFT JOIN goods ON
goods.booth_id = booth.id
WHERE 
shop.`name` LIKE "南苑店%";
-- 7.查询“南苑店”中,在售课别为“肉类”商品的对应商户名称及其商品id和商品名(10分)查询结果字段表示为:商户名称,商品id,商品名称。
SELECT booth.id 商户id,goods.id 商品id,goods.goods_name 商品名称 FROM shop LEFT JOIN booth ON
shop.id = booth.shop_id LEFT JOIN goods ON
goods.booth_id = booth.id LEFT JOIN category ON
goods.id = category.goods_id LEFT JOIN categoryplus ON 
category.categoryplus_id = categoryplus.id
WHERE
categoryplus.`name` = "肉类" 
AND
shop.name LIKE "南苑店%";

优化后的sql:

-- 1.请查询2020年全年总销售额前5的门店id,门店名称,总销售额。以降序形式排列(20分)查询结果字段表示为:id,门店名称,总金额。
SELECT a.门店id,a.`门店名称`,SUM(a.`销售额`) 销售额 FROM 
(SELECT shop.id 门店id,shop.`name` 门店名称,SUM(h.totalprice) 销售额 
FROM shop 
JOIN booth on shop.id = booth.shop_id
JOIN goods ON goods.booth_id = booth.id 
JOIN historytrade h ON
h.goods_id = goods.id
WHERE h.tradetime BETWEEN '2020-01-01 00:00:00' and '2020-12-31 23:59:59' GROUP BY h.goods_id) a
GROUP BY a.`门店id`
ORDER BY 销售额 DESC
LIMIT 5;

优化内容:left join驱动表排在前面或者改成join、
改写where后面的语句,不能首跟表达式、
创建索引CREATE INDEX index_tradetime ON historytrade (tradetime)


-- 2.查询店名为“清河店”的门店,2020年销售商品的总重量
SELECT goods.id,COUNT(goods_id) countGood FROM shop 
JOIN booth ON shop.id = booth.shop_id  
JOIN goods ON goods.booth_id = booth.id  
JOIN historytrade h ON h.goods_id = goods.id 
WHERE h.tradetime BETWEEN '2020-01-01 00:00:00' and '2020-12-31 23:59:59'
AND
shop.`name` LIKE "清河店%"
GROUP BY goods.id;

优化内容:left join驱动表排在前面或者改成join、
改写where后面的语句,不能首跟表达式


-- 3.查询店名为“南苑店”在2020年的农残检查的合格率,(1为合格)合格率的定义为检测合格的次数除以检测的总次数
SELECT 
SUM((CASE WHEN r.checking = 0 THEN 1 ELSE 0 END))/COUNT(r.id)*100 合格率
FROM shop LEFT JOIN booth ON
shop.id = booth.shop_id LEFT JOIN remain r ON
r.booth_id = booth.id
WHERE r.check_time BETWEEN '2020-01-01 00:00:00' and '2020-12-31 23:59:59'
AND
shop.name LIKE "南苑店%";

优化内容:left join驱动表排在前面或者改成join、
改写where后面的语句,不能首跟表达式

-- 4.查询“南苑店”中销售额比“洋洋水果”高的商户名称和销售额,并以销售额升序进行排列。查询结果字段展示为:商户名称,销售额
SELECT a.商户名称,a.销售额 FROM (SELECT booth.booth_name 商户名称,SUM(h.totalprice) 销售额 FROM shop  JOIN booth ON
shop.id = booth.shop_id  JOIN goods ON
goods.booth_id = booth.id  JOIN historytrade h ON
h.goods_id = goods.id
WHERE 
shop.`name` LIKE "南苑店%"
GROUP BY 商户名称) a WHERE
a.`销售额`>
(SELECT SUM(h.totalprice) FROM shop  JOIN booth ON
shop.id = booth.shop_id  JOIN goods ON
goods.booth_id = booth.id  JOIN historytrade h ON
h.goods_id = goods.id
WHERE 
shop.`name` LIKE "南苑店%" AND booth.booth_name = "洋洋水果")
ORDER BY a.`销售额`;

优化内容:left join驱动表排在前面或者改成join、
创建索引CREATE INDEX index_goods_id ON historytrade (goods_id);
CREATE INDEX index_shop_id ON booth (shop_id);

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值